有人可以解释一下为什么在C/C++中,一些4字节整数的32位按位移位可能不会返回零?为什么它取决于-O编译器的选项?
-O
例如,此代码在gcc 4.8.3中给出45 -O0和0以及-O3选项:
-O0
-O3
unsigned int x = 45; // 4 bytes x = x >> 32; printf("%u\n", x);
为什么会这样?
c c++ bit-manipulation shift
bit-manipulation ×1
c ×1
c++ ×1
shift ×1