<<演算的规则是什么
运算的规则是什么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有规定的。
所以当移位超过31位后,结果可能会是未知的。
[解决办法]如果考虑常量替换(常量代换)优化,二者极有可能相同,结果是。。。。。0
比如
VC Release 版,二者结果都是。。。。。0
VC Debug 版,结果1 << 32是。。。。。0,1 << x 就是SAL and SHL指令的结果。
[解决办法]超过32位时,结果是取决于编译器+cpu的,不要结果做任何假设。