前提・実現したいこと
javaでシフト演算(右)を理解したい
発生している問題・エラーメッセージ
シフト演算(右 >>)をint型の変数(値は8)で、1つずつ行ったとき
想定として、ローテートが起こり、
1ビットが右に移動し、1の後は最上位の桁に移動すると思い、
8(2^3)→4(2^2)→2(2^1)→1(2^0)→2147483648(2^31)→1073741824(2^31)…
が出力されると思っていました。
が、結果としては
8(2^3)→4(2^2)→2(2^1)→1(2^0)→0→0→0→…→8(32回右シフトした)
と0が続いていました。
なぜ0が出力されるのでしょうか?
ソース※抜粋
System.out.println("◇シフト演算(右)");
System.out.println("・循環");
int r = 0; // 結果表示
int c = 33;
for (int i = 0; i < c; i++) {
r = 8 >> i;
System.out.println("結果:" + r + ":i=" + i);
}
結果
◇シフト演算(右)
・循環
結果:8:i=0
結果:4:i=1
結果:2:i=2
結果:1:i=3
結果:0:i=4
結果:0:i=5
結果:0:i=6
結果:0:i=7
結果:0:i=8
結果:0:i=9
結果:0:i=10
結果:0:i=11
結果:0:i=12
結果:0:i=13
結果:0:i=14
結果:0:i=15
結果:0:i=16
結果:0:i=17
結果:0:i=18
結果:0:i=19
結果:0:i=20
結果:0:i=21
結果:0:i=22
結果:0:i=23
結果:0:i=24
結果:0:i=25
結果:0:i=26
結果:0:i=27
結果:0:i=28
結果:0:i=29
結果:0:i=30
結果:0:i=31
結果:8:i=32
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/06 12:16
2019/04/06 12:34 編集
2019/04/06 12:39
2019/04/06 12:44
退会済みユーザー
2019/04/06 13:20
2019/04/06 13:23
2019/04/06 13:30
2019/04/06 15:10
2019/04/06 22:03
2019/04/06 23:18