2

Javaでは、なぜ-32 >>> -1 = 1なのですか?
-32だけに固有のものではありません。大きすぎない限り、すべての負の数に対して機能します。
x >>>
-1 = 1
x >>> -2 = 3
x >>> -3 = 7
x >>> -4=15
与えられた0>x>いくつかの大きな負の数

>>>-1は<<1と同じではありませんか?ただし、-32 << 1=-64です。
私は2つの補語を読みましたが、それでも理由がわかりません。

4

2 に答える 2

6

これは、32ビットをシフトする場合int、シフト距離の最後の5ビットだけがかかるためです。(つまり、mod 32)、つまり-1 mod 32 = 31なので、31ビット右にシフトします。負の数(最初のビットはすべて1)をシフトすると、1になります。同様に、右に-2シフトすると、右に30ビットシフトします。aをシフトするlongと、6がかかります。シフト距離のビット。シフト演算子の動作の仕様については、http: //docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.19を参照してください。

于 2010-04-20T00:12:09.603 に答える
1

Java は、左オペランドのサイズに基づいて右オペランドをマスクします。

32 ビットint iの場合、

i << N   --> i << (N mod 32)

64 ビットlong numの場合、

num << N --> num << (N mod 64)

このシフト カウント オペランドのマスキングは、 および にも適用され>>ます>>>

こちらもご覧ください

于 2010-04-20T00:51:51.930 に答える