首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

<<演算的规则是什么

2014-01-01 
运算的规则是什么int y 1 32y是0int x 32int y 1 xy是1[解决办法]1 32 是常量,编译时

<<运算的规则是什么
int y = 1 << 32;
y是0

int x = 32;
int y = 1 << x;
y是1
[解决办法]
1 << 32 是常量,编译时1和32都被当成int,编译时就被计算成为0了。
1 << x无法在编译前确定,是被采用指令shl reg cl来执行的,但是intel的汇编对shl有规定的。

引用
The SAL and SHL instructions perform the same operation (see Figure 7-6). They shift the source operand left by
from 1 to 31 bit positions.

所以当移位超过31位后,结果可能会是未知的。
[解决办法]
引用:
int y = 1 << 32;
y是0

int x = 32;
int y = 1 << x;
y是1

如果考虑常量替换(常量代换)优化,二者极有可能相同,结果是。。。。。0
比如
VC Release 版,二者结果都是。。。。。0
VC Debug 版,结果1 << 32是。。。。。0,1 << x 就是SAL and SHL指令的结果。

[解决办法]
超过32位时,结果是取决于编译器+cpu的,不要结果做任何假设。

热点排行