Nic*_*ndo 1 c++ binary hex decimal
例如,以下是两种设置整数变量的方法(比如说C++):
int x = 0xFF;
int y = 255;
Run Code Online (Sandbox Code Playgroud)
哪个语句编译得更快,将实际位设置为整数值?
编辑:*编译从执行更改.我假设转换为二进制是在执行时,但似乎是在编译时给定@ muntoo的答案
执行时间完全没有区别,编译速度可能没有差别.
添加以回应评论:
这是发生的事情.编译器有一个解析器,可能是递归下降的,在底部调用一个词法分析器来获取令牌.在这种情况下,令牌后面=是一个数字,它可以通过前导数字来表示,所以它是这样的,其中pc是指向当前字符的指针:
if (isdigit(*pc)){
intpart = 0;
if (pc[0]=='0' && pc[1]=='x'){
pc += 2;
while(ishexdigit(*pc)){
intpart *= 16;
if (isdigit(*pc)){
intpart += (*pc - '0')
}
else {
intpart += (tolower(*pc) - 'a' + 10);
}
pc++;
}
}
else {
while(isdigit(*pc)){
intpart *= 10;
intpart += (*pc - '0');
pc++;
}
if (*pc == '.'){
// ... handle fractional part
}
}
}
Run Code Online (Sandbox Code Playgroud)
无论如何,你可以看到,这是一个非常紧密的循环,它isdigit或ishexdigit或tolower在的每一个字符,和乘法,减法和加法一次或两次.假设这些函数是在线的,我们说每个字符可能有10-20条指令.在十六进制情况下,每个字符可能稍微多一些指令,但十进制数字会有更多的字符,因此很难说先验哪个应该更快.这只发生在您有能力在代码中键入的此类整数的总数,例如可能在100左右.如果机器可以执行,例如,每秒10 ^ 8条指令,它可以按周围的速率读取数字每秒10 ^ 7,或每个字符大约100纳秒,或者对于文件中的所有数字为10微秒,给出或采取一个数量级.
一旦编译器知道它是一个数字,它就会成为抽象语法树的一部分,它用于生成汇编语言.到那时,它是十六进制或十进制的事实早已被遗忘.它只知道它是某个值的二进制整数,所以汇编语言是相同的.