算術ビット シフト演算子が C でどのように機能するか、およびそれが符号付き 32 ビット整数にどのように影響するかを理解しようとしています。
簡単にするために、1 バイト (8 ビット) 内で作業するとしましょう。
x = 1101.0101
MSB[ 1101.0101 ]LSB
Stack Overflow といくつかの Web サイトに関する他の投稿を読んで、次のことがわかりました:
<<MSB に向かって (私の場合は左に) シフトし、「空の」LSB ビットを 0 で埋めます。
そして>>、LSBに向かって(私の場合は右に)シフトし、「空の」ビットをMSビットで埋めます
そのx = x << 7ため、LSB を MSB に移動し、すべてを 0 に設定します。
1000.0000
>> 7さて、最後の結果が だとしましょう。これにより、[0000.0010]? 私は正しいですか?
シフト演算子に関する私の仮定は正しいですか?
私は自分のマシンでテストしました**
int x = 1; //000000000......01
x = x << 31; //100000000......00
x = x >> 31; //111111111......11 (Everything is filled with 1s !!!!!)
なんで?