[隠しリンク -- 悪質なサイトに発展] より
シフトする値 (左オペランド) が int の場合、シフトの実行には右オペランドの最後の 5 桁のみが使用されます。シフトの実際のサイズは、31 (0x1f) でマスクされた右側のオペランドの値です。つまり、シフト距離は常に 0 から 31 の間です (シフト値が > 32 の場合、シフトは 32 % 値です)。
35 00000000 00000000 00000000 00100011
31 -> 0x1f 00000000 00000000 00000000 00011111
& -----------------------------------
Shift value 00000000 00000000 00000000 00000011 -> 3
-29 11111111 11111111 11111111 11100011
31 -> 0x1f 00000000 00000000 00000000 00011111
& -----------------------------------
Shift value 00000000 00000000 00000000 00000011 -> 3
それは本当にどういう意味ですか?右シフトの場合、乗算できる最大値は 32 ということですか? これはオーバーフローを防ぐためですか?