右移“>>”在C99

时间:2011-04-13 14:58:06

标签: c c99 bit-shift shift

  

可能重复:
  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

所有编译器都以这种方式工作吗?

1 个答案:

答案 0 :(得分:10)

将32位整数移位32位是未定义的行为。结果是不可预测的。

在C和C ++中,如果整数具有N位,则只允许移位少于N位。如果您移动N或更多,则行为未定义。

实际上,当移位32位整数时,某些平台只会将移位计数解释为5位值(丢弃低于5的任何位),这意味着32将被解释为相同作为0的方式。这显然是在您的平台上发生的事情。该值根本没有转移。