0

Java のシフト演算子の概念を示すこのデモ プログラムがありますが、このプログラムがこの回答を生成する方法がわかりません。その方法を教えてください。

public class Operator {
    public static void main(String[] args) {
        int s = -10;
        s = s >>2;
        System.out.println("value of i=" + s);
    }

}

出力:

i=-3 の値

4

4 に答える 4

2

11110110 2 >> 2 == 11111101 2 == -3 10

これは、符号拡張された右シフト操作です。右にシフトするため、左にゼロを挿入するのではなく、最上位ビットの値をコピーします。残りの説明は、符号付き整数の 2 の補数表現についてです。

一般に、負の整数を桁数だけ右シフトすると、2 nnで割り、そこから 1 を引く効果があります。

于 2012-05-09T12:00:03.460 に答える
0

Java は、2 の補数を使用して負の整数を表します。したがって、-1010 進数は2 進数です1111111111110110

>>符号拡張右シフト演算子です。これは、最上位ビット (つまり、符号ビット) が1最初のオペランドにある場合1、結果にもあることを意味します。

1111111111110110右に 2桁シフトすると、 が得られます。1111111111111101これは-310 進数です。

于 2012-05-09T12:02:37.380 に答える
0

次の 2 行をプログラムに追加して、少し整理することができます。

System.out.println(Integer.toBinaryString(-10));
System.out.println(Integer.toBinaryString(-3));

//Output:
11111111111111111111111111110110
11111111111111111111111111111101
                            --^

>> 2-102 つの位置のバイナリ表現を右にシフトする (yielding ) ことを意味し-3ます。

于 2012-05-09T12:03:13.290 に答える