1. 程式人生 > >Java:位移運算符

Java:位移運算符

pub args pri info idt ext static eight 符號位

Java中有三個位移運算符,用於對int類型整數的二進制表示進行操作:

1. "<<": 左移運算符,在二進制表示末尾添加“0”,之前的其他位相當於左移了一位,可看作成“乘以二”操作。

例如,a = 10,a 的二進制表示為“0000 0000 0000 0000 0000 0000 0000 1010”,“a << 1”表示a的二進制表示左移一位,結果為“0000 0000 0000 0000 0000 0000 0001 0100”,對應十進制的“20”。

b =-10, b 的二進制表示為“1111 1111 1111 1111 1111 1111 1111 0110”,“b<<1”代表b的二進制表示左移一位,結果為“1111 1111 1111 1111 1111 1111 1110 1100”,對應十進制“-20”。

2. ">>": 右移運算符,去掉二進制表示末尾幾位,並在最前面添加符號位正數添“0”、負數添“1”。">>1"去掉最後一位,">>2"去掉最後兩位。不能單純的看作成“除以二”操作。

例如,a = 9, “a>>1"代表a的二進制表示“0000 0000 0000 0000 0000 0000 0000 1001”右移一位,結果為“0000 0000 0000 0000 0000 0000 0000 0100”,對應十進制的“4(不是“除以二”操作)

b = -9,“b>>1”代表b的二進制表示“1111 1111 1111 1111 1111 1111 1111 0111”右移一位,結果為“1111 1111 1111 1111 1111 1111 1111 1011”,對應十進制的“-5”。

3. "<<<": 無符號右移運算符,不再考慮符號位,在最前面添加“0”(正數前面的“0”符號位可以省略)

例如,b = -9,“b >>> 1”代表b的二進制表示“1111 1111 1111 1111 1111 1111 1111 0111”右移一位,結果為“0111 1111 1111 1111 1111 1111 1111 1011”,對應十進制的“2147483643”。

public class Test {
    public static void main(String[] args) {
        int a = -9;
        System.out.println("a = " + a);
        System.out.println("a的二進制表示:       " + Integer.toBinaryString(a));
        System.out.println("");
        // "<<"左移運算符
        int a1 = a << 1;
        System.out.println("a<<1 = " + a1);
        System.out.println("a<<1後的二進制表示:  " + Integer.toBinaryString(a1));
        System.out.println("");
        // ">>"右移運算符
        int a2 = a >> 1;
        System.out.println("a>>1 = " + a2);
        System.out.println("a>>1後的二進制表示:  " + Integer.toBinaryString(a2));
        System.out.println("");
        // 無符號右移運算符
        int a3 = a >>> 1;
        System.out.println("a >>> 1 =" + a3);
        System.out.println("a>>>1後的二進制表示: " + Integer.toBinaryString(a >>> 1));

    }
}

  

運行結果:

技術分享圖片

2018-01-02 18:51:21

Java:位移運算符