Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
次のコードを検討してください。
int i = 3 << 65;
結果はですi==0が、実際の結果はi==6です。いくつかのテストで、私は次のコードでそれを見つけました:
i==0
i==6
int i, s; int a = i << s; int b = i << (s & 31);
aとの値bは常に同じです。
a
b
C標準は、32ビット(タイプの幅)を超えるシフトについて何かを述べていますか、intそれともこの不特定の動作ですか?
int
私のWG12/N1124ドラフト(標準ではありませんが、Good Enough For Me)から、6.5.7ビット単位シフト演算子に次のブロックがあります。
右のオペランドの値が負であるか、プロモートされた左のオペランドの幅以上の場合、動作は未定義です。
したがって、未定義です。気をつけて。