質問: 初心者です。 以下のことで困っております。 どなたか教えていただければ幸いです。 どうぞよろしくお願いいたします。 ### 前提・実現したいこと 今、課題(解答なし)を解いておりまして、全然わからない問題が出てきまして、こちらで質問させていただきました。 Javaの課題として与えられておりますが、質問場所が間違えておればご指摘いただければと思います。 ■問題 int型変数ixを宣言し、0b1を代入する。 ビットシフト<<1を32回繰り返し値が下記になることを確認する。 31回目でマイナスの値になり、32回目でゼロになる。 その理由を考えなさい。 ### 試したこと 0b1が16進数だと思い、 10進数(0|11|1)に直し、 2進数(0000|1011|0001)に直してみました。(ここまで合っているのかもわかっておりません) ただ、今12ビットの状態になっており、そこから32ビットも左にシフトすることができないのではないかと思いまして、 詰まりました。 また、<<1が左に1ビット分移動するという解釈で合っているのかもわかっておりません。 (修正) 0bが2進数をあらわすことを教えていただきましたので、0b1が「2進数で1をあらわす」ということまでわかったのですが、 その先がわかりません。 ### 補足情報(FW/ツールのバージョンなど) もし必要な情報があれば教えていただきたく思います。
回答: Javaのint型は32ビットなので、`1`をint型変数に入れると、 `0000 0000 0000 0000 0000 0000 0000 0001` になります。途中の空白は桁の数えやすさのために入れています。 これで、シフトするイメージが湧きませんか? あとは、2の補数表現というのを学んでいるはずなので、思い出してください。