Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

ビットの>>演算子について

ビットの演算子>>について以下の問題がありました。回答していただきませんか。
以下のように、設定し、System.out.printlnを使って、出力し、以下の結果を取った

   設定       出力値
int a = -8;
int b1=a>>1;     -4
int b2=a>>2;     -2
int b3=a>>3;     -1    b1〜b3の結果は確かに理解できる
int b4=a>>4;     -1
・・・
・・・
int b31=a>>31;     -1  b4〜b31の出力結果は何で-1ですか。
int b32=a>>32;     -8
int b33=a>>33;     -4
int b34=a>>34;     -2  
int b35=a>>35;     -1  何でb32からまた-8、-4、-2、-1でループしていますか?

4

回答

5437

閲覧

4件の回答

評価

0

>回答していただきませんか。
「教えてください」とか「お願いします」とかならともかく、そういう言い方はしないほうが良いです。

>b4〜b31の出力結果は何で-1ですか。
http://www.javaroad.jp/java_operator4.htm
を見てみましょう。

>何でb32からまた-8、-4、-2、-1でループしていますか?
long以外では、シフトの範囲は0〜31のようです。
0x1fでマスクされてから実行されるのでしょう。

評価

0

11111111111111111111111111111000 = -8

>>1
11111111111111111111111111111100 = -4
>>2
11111111111111111111111111111110 = -2
>>3
11111111111111111111111111111111 = -1
>>4・・・31
11111111111111111111111111111111 = -1

>>32 = 32ビットを1周
11111111111111111111111111111000 = 元の値 = -8

OK? By the way, Are you a foreigner?

評価

0

はい、外国人です。日本語はまだまだですが、すみませんでした。
一周後元に値に戻ると言うことはどこかに元の値を保存されていますか?(どこですか?)

評価

0

一周は間違いでした。ローテートじゃなかった。失礼しました。

32以上の数をシフトする数に指定された場合、
32で割った余りがシフトに使用される、と言う事です。

1 → 1シフト
2 → 2シフト
・・・
31 → 31シフト
32 → 0シフト
33 → 1シフト
34 → 2シフト
・・・

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。