有人提到,编写良好的C编译器应在编译时(即非运行时)执行移位运算符。例如,在此代码中,左移-<
码:

constant unsigned int elements = length/8 + (length % y > 0 ? 1 : 0);
unsigned char bit_arr[elements];


伪代码:

bit_arr[i] |= (1 << j); // Set
bit_arr[i] &= ~(1 << j);  // Unset
if( bit_arr[i] & (1 << j) ) // Test

最佳答案

你到底在问什么您的意思是“编译器会自己做转换吗”?如果那是您要的答案,那么答案是“取决于” :)。如果要移位的数字和移位的大小都是编译时常量,则编译器几乎可以肯定会进行移位(尽管不必这样做)。否则,它将生成执行移位的较低级代码(通常是一条机器指令)。

关于c - A/C编译器是否在编译时执行移位操作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5998935/

10-11 22:58
查看更多