可能重复:
Weird behavior of right shift operator
你好
为什么这个函数中的两个数字打印相同?这不是一个循环的转变。
unsigned int i=0x89878685;
int main()
{
printf("0x%x\n", i);
printf("0x%x\n", i>>32);
}
$ ./a.out
0x89878685
0x89878685所有的编译器都是这样工作的吗?
发布于 2011-04-13 14:59:02
将32位整数转换为32位是未定义的行为.结果是不可预测的。
在C和C++中,如果整数有N位,则只允许移动小于N位。如果您移动N或更多,则行为是未定义的。
实际上,当移动32位整数时,一些平台只会将移位计数解释为5位值(丢弃低于5位以上的任何位),这意味着32将被解释为与0相同的方式。这显然是发生在你的平台上。这个值一点也不动。
https://stackoverflow.com/questions/5651314
复制相似问题