当我通过n = 0x0
时,我在屏幕上显示0xffffffff
我期望的应该是0x00000000
当我按32 bits
移动单词时
(只是忽略x!我没有在函数中使用它。)
void logicalShift(int x, int n) {
int y = 32;
int mask = 0xffffffff;
printf("mask %x", mask << (y-n));
}
其中一个有趣的观点是
void logicalShift(int x, int n) {
int y = 32;
int mask = 0xffffffff;
printf("mask %x", mask << 32);
}
这将输出我的预期。我错过了什么吗? 谢谢!
我在ubuntu上运行
答案 0 :(得分:4)
32位值上的32位左移具有未定义的结果。您只能将0到31位移位。
另见:Why doesn't left bit-shift, "<<", for 32-bit integers work as expected when used more than 32 times?
答案 1 :(得分:2)