请考虑以下代码:
int i = 3 << 65;
我希望结果为i==0
,但实际结果为i==6
。通过一些测试,我发现使用以下代码:
int i, s;
int a = i << s;
int b = i << (s & 31);
a
和b
的值始终相同。
C标准是否有关于移位超过32位(类型int
的宽度)的说法或者这种未指明的行为?
答案 0 :(得分:13)
从我的WG12 / N1124草案(不是标准,但对我来说足够好),6.5.7 按位移位运算符中有以下块:
如果右操作数的值为负或者是 大于或等于提升的左操作数的宽度,行为是未定义的。
所以,未定义。小心。