c语言移位问题
本文介绍了c语言移位问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
int x = 1; //int为32位
int a = 1 << 32; //00000000
int b = x << 32; //00000001
为什么这两种方式结果会不同?
看起来是 第3行对32取了模 但第2行没有
第2行的1默认不就是int类型吗
解决方案
这里有个类似的问题(动动手指就能搜到的好么)。
C 层面的解释是:未定义行为,怪异点是正常的。
CPU 层面的解释是:Intel CPU 把左移位数的操作数只取了五位。但为什么结果不同,你还是自己去看 StackOverflow 那个回答吧。
PS: 这个程序开优化之后结果是一致的,也就是说未优化时,部分结果是编译期计算的,部分结果是交给 CPU 在运行时计算的,所以有差别。
这篇关于c语言移位问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文