有人提到,编写良好的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/