考虑以下代码: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)说了什么,还是这种未指定的行为?
2 回答
慕码人2483693
TA贡献1860条经验 获得超9个赞
从我的WG12 / N1124草案(不是标准,但对我来说足够好)中,在6.5.7 位移位运算符中包含以下块:
如果右操作数的值为负或大于或等于提升的左操作数的宽度,则行为是不确定的。
因此,undefined。小心。
- 2 回答
- 0 关注
- 342 浏览
添加回答
举报
0/150
提交
取消