考慮以下代碼:int i = 3 << 65;我希望結果是i==0,但是實際結果是i==6。通過一些測試,我發(fā)現(xiàn)使用以下代碼:int i, s;int a = i << s;int b = i << (s & 31);值a和b始終是相同的。C標準是否對移位超過32位(type的寬度int)說了什么,還是這種未指定的行為?
2 回答

慕碼人2483693
TA貢獻1860條經(jīng)驗 獲得超9個贊
從我的WG12 / N1124草案(不是標準,但對我來說足夠好)中,在6.5.7 位移位運算符中包含以下塊:
如果右操作數(shù)的值為負或大于或等于提升的左操作數(shù)的寬度,則行為是不確定的。
因此,undefined。小心。
- 2 回答
- 0 關注
- 359 瀏覽
添加回答
舉報
0/150
提交
取消