私はビットシフトに取り組んでおり、この問題に遭遇しました。
私は2つのintを持っています:
int x = 1;
int y = 2;
違いは何ですか:
x = x << (31 + 1);
と
y = y << 31;
私は結果が同じになると思っていました (つまり、x と y の両方が 1 に等しい) が、そうではありません...理由がわかりません。2 は、「1」ビットが 1 スペース左に移動した 1 です。
ありがとう!
つまり、シフトレフトができなくなったら、先頭に戻りませんか?
編集:何が起こっていると思うかを明確にしましょう:
x = 1 から始めるので、次のようになります。
00000000 00000000 00000000 00000001
次に、それを 31 +1 (または 32) 左にシフトします。これにより、次のことがわかります。
00000000 00000000 00000000 00000001
これも 1 です。
次に、y = 2 を実行します。
00000000 00000000 00000000 00000010
シフトを 31 残しました。これにより、次の結果も得られます。
00000000 00000000 00000000 00000001
したがって、x = y = 1 となります。これが間違っていることはわかっていますが、その理由を説明できる人はいますか?