C标准对于比特类型宽度的位移更多的比特说了些什么?

时间:2012-06-30 00:31:07

标签: c bit-shift

请考虑以下代码:

int i = 3 << 65;

我希望结果为i==0,但实际结果为i==6。通过一些测试,我发现使用以下代码:

int i, s;
int a = i << s;
int b = i << (s & 31);

ab的值始终相同。

C标准是否有关于移位超过32位(类型int的宽度)的说法或者这种未指明的行为?

1 个答案:

答案 0 :(得分:13)

从我的WG12 / N1124草案(不是标准,但对我来说足够好),6.5.7 按位移位运算符中有以下块:

  

如果右操作数的值为负或者是   大于或等于提升的左操作数的宽度,行为是未定义的。

所以,未定义。小心。