3

仕組みは理解して>>>います。それを行うために、私はこのプログラムを持っています:

public class Main {
    public static void main(String[] args) 
    {
        short i = 130;
        byte b = (byte)i;
        String a = Integer.toBinaryString(256 + (int) b);
        System.out.println(Integer.toBinaryString(i));
        System.out.println(a.substring(a.length() -8));
        System.out.println(b);

        byte c = (byte) (b >>> 2);
        String x = Integer.toBinaryString(256 + (int) c);

        System.out.println(x.substring(x.length() -8));
        System.out.println(c);
    }
}

そして、私はこの出力を取得します:

10000010
10000010
-126
11100000
-32

バイナリとして表示するには、ここでバイトをバイナリ文字列として表示する方法を見つけました。

オペレーター>>>はゼロを追加しますが、私はこれを取得します:

-126
11100000
-63

それ以外の:

-126
10100000
-32

0 の代わりに 1 を追加しています。

11100000
10100000

私は何を間違っていますか?たぶん、私は何も理解していません。

4

1 に答える 1

9

問題は、最初に値が -126 の int にb >>> 2昇格することです。つまり、b

11111111 11111111 11111111 10000010

ゼロ拡張で右に 2 シフトすると、次のようになります。

00111111 11111111 11111111 11100000

それがバイトに変換されると、最初の 3 ワードが取り除かれ、11100000 が表示されます。

ビットシフトの詳細については、JLS のセクション 15.19を参照してください。

于 2012-07-17T16:37:35.803 に答える