c语言移位问题

int x = 1;          //int为32位
int a = 1 << 32;    //00000000
int b = x << 32;    //00000001

为什么这两种方式结果会不同?

看起来是 第3行对32取了模 但第2行没有

第2行的1默认不就是int类型吗

阅读 2.3k
1 个回答

这里有个类似的问题(动动手指就能搜到的好么)。

C 层面的解释是:未定义行为,怪异点是正常的。

CPU 层面的解释是:Intel CPU 把左移位数的操作数只取了五位。但为什么结果不同,你还是自己去看 StackOverflow 那个回答吧。

PS: 这个程序开优化之后结果是一致的,也就是说未优化时,部分结果是编译期计算的,部分结果是交给 CPU 在运行时计算的,所以有差别。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进