Java位運算符和移位運算符詳解

位運算符主要針對二進制,它包括了:“與”、“非”、“或”、“異或”。
移位運算符包括,“左移運算符”,“有符號右移運算符”、“無符號右移運算符”。



位運算

  1. 異或 ^
    異或運算符是用符號“^”表示的,其運算規律是:
    兩個操作數的位中,相同則結 果爲0,不同則結果爲1

    簡單實例

    /**
     * @function: 異或位運算
     */
    @Test
    public void test(){
        int a=33;
        int b=32;
        System.out.println(a^b);
    }
    

    輸出結果:1
    因爲33轉換成二進制是100001,32轉換成二進制是100000,異或結果是000001

    拓展:異或的應用

    第一:簡單的加密解密
    因爲a ^ b ^ b = a

    第二:高效率交換兩個整數

    /**
     * @function: 使用異或,高效率交換兩個整數
     */
    @Test
    public void test2(){
        int a=100;
        int b=88;
    
        //使用異或交換
        a=a^b;
        b=a^b;
        a=b^a;
    
        System.out.println(a);
        System.out.println(b);
    }
    

    運行結果:
    在這裏插入圖片描述
    其實兩個應用道理是相同的,一個數異或另一個數兩次得到的還是他本身



  1. 與 &
    與運算符用符號“&”表示,其使用規律如下:
    兩個操作數中位都爲1,結果才爲1,否則結果爲0

    簡單實例

    /**
     * @function: 與位運算
     */
    @Test
    public void test3(){
        int a=33;
        int b=32;
        System.out.println(a&b);
    }
    

    運行結果:32
    因爲因爲33轉換成二進制是100001,32轉換成二進制是100000,與結果是100000

  2. 或 |
    或運算符用符號“|”表示,其運算規律如下:
    兩個位只要有一個爲1,那麼結果就是1,否則就爲0

    簡單實例

    /**
     * @function: 或位運算
     */
    @Test
    public void test4(){
        int a=33;
        int b=32;
        System.out.println(a|b);
    }
    

    運行結果:33
    因爲因爲33轉換成二進制是100001,32轉換成二進制是100000,或結果是100001

  3. 非 ~
    非運算符用符號“~”表示,其運算規律如下:
    如果位爲0,結果是1,如果位爲1,結果是0

    簡單實例

    /**
     * @function: 非位運算
     */
    @Test
    public void test5(){
        int a=33;
        int b=~a;
        System.out.println(b);
        System.out.println(Integer.toBinaryString(b));
    }
    

    運行結果:
    在這裏插入圖片描述

移位運算

移位運算操作的就是二進制的位
在這裏插入圖片描述
簡單的,<<n 左移相當於乘2的n次方,>>n(>>>n) 右移相當於除2的n次方,然後這個>>>與>>的區別是對負數的處理上

簡單示例

	/**
     * @function: 移位運算
     */
    @Test
    public void test6() {
        int a = 32;
        int b = -32;
        System.out.println(Integer.toBinaryString(a));
        System.out.println(Integer.toBinaryString(b));
        System.out.println(Integer.toBinaryString(a >> 2));
        System.out.println(Integer.toBinaryString(b >> 2));
        System.out.println(Integer.toBinaryString(a >>> 2));
        System.out.println(Integer.toBinaryString(b >>> 2));
        System.out.println(Integer.toBinaryString(a << 2));
        System.out.println(Integer.toBinaryString(b << 2));
    }

運行結果
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章