私はJavaで奇妙な問題を抱えており、WindowsとMacの両方のシステムでテストし、この問題が一貫して発生しています。Javaビットワイズ演算子(ゼロ塗りつぶしシフト)ゼロで埋めていない
このコード
int a = -32; //11100000 as per two's complement
System.out.println(a >>> 2);
を見て、私はそのバイナリ形式で00111000である、このコードは56を生成するために期待しています。ただし、バイナリ形式で1073741816、111111111111111111111111111000という値が生成されます。 intは32ビットのJavaであると理解していますが、バイトのタイプの設定も同じことをします。私はこの
int b = 0b11100000;
System.out.println(b);
System.out.println(b >>> 2);
ようなバイナリリテラルを宣言した場合
しかし最初の文は、値224(期待を-32)を生成する第二の文は56
の期待値を生成している間、私はつもりです狂った?
「Integer.toBinaryString()」などを使用してデバッグする方が簡単かもしれません –