猿问

对于比类型的宽度更多位的位移,C标准怎么说?

考虑以下代码:


int i = 3 << 65;

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


int i, s;

int a = i << s;

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

值a和b始终是相同的。


C标准是否对移位超过32位(type的宽度int)说了什么,还是这种未指定的行为?


至尊宝的传说
浏览 343回答 2
2回答

慕码人2483693

从我的WG12 / N1124草案(不是标准,但对我来说足够好)中,在6.5.7 位移位运算符中包含以下块:如果右操作数的值为负或大于或等于提升的左操作数的宽度,则行为是不确定的。因此,undefined。小心。
随时随地看视频慕课网APP
我要回答