osg*_*sgx 3 c c99 bit-shift shift
可能重复:
右移操作员的奇怪行为
你好
为什么这个函数的两个数字都打印相同?它不是循环移位.
unsigned int i=0x89878685;
int main()
{
printf("0x%x\n", i);
printf("0x%x\n", i>>32);
}
$ ./a.out
0x89878685
0x89878685
Run Code Online (Sandbox Code Playgroud)
所有编译器都以这种方式工作吗?
AnT*_*AnT 10
将32位整数移位32位是未定义的行为.结果是不可预测的.
在C和C++中,如果整数有N位,则只允许移位少于N位.如果你转移N或更多,行为是未定义的.
实际上,当移位32位整数时,某些平台将简单地将移位计数解释为5位值(丢弃低于5的任何位),这意味着32将以相同的方式解释0.这显然是在您的平台上发生的事情.该值根本没有移动.