byte x = -1;
for(int i = 0; i < 8; i++)
{
x = (byte) (x >>> 1);
System.out.println("X: " + x);
}
私が理解しているように、Javaはデータを2の補数、つまり-1 = 11111111(ウィキペディアによる)で保存します。
また、Javaドキュメントから:「ビットパターンは左側のオペランドで指定され、右側のオペランドでシフトする位置の数が指定されます。符号なしの右シフト演算子>>>」はゼロを左端にシフトします">>" の後の一番左の位置は符号拡張に依存します。"
つまり、 >>> は毎回 0 を左端にシフトします。したがって、このコードは
反復: x のビット表現
0: 11111111
1: 01111111
2: 00111111
3: 00011111
...すぐ
ただし、私の出力は常に X: -1 です。これは、>>> が符号ビットを一番左の位置に置いていることを意味します (推測します)。それで、>> を試してみると、同じ結果が得られました。
どうしたの?私の出力は、X: -1、x: 127、x: 63 などになると思います。