java中的“&”、“|”、“^”、“~”運算符怎麼用?

問題:

java源碼中的位運算是如何使用的?

位運算符的用法

java中的“&”、“|”、“^”、“~”邏輯運算符的使用,此處使用了int類型,4個字節32位

&運算符

&是AND運算符,是一種位運算符。有0爲0,全1爲1

  • 1&1=1;
  • 1&0=0;
  • 0&1=0;
  • 0&0=0;
    /**
     * &是AND運算符,是一種位運算符。有0爲0,全1爲1
     * 運算規則如下:
     * 1&1=1;
     * 1&0=0;
     * 0&1=0;
     * 0&0=0;
     */
    @Test
    public void test01() {
        //a的二進制補碼錶示爲:0000 0000 0000 0000 0000 0000 0000 0111
        int a = 7;
        print2Binary(a);
        //b的二進制補碼錶示爲:0000 0000 0000 0000 0000 0000 0000 0010
        int b = 2;
        print2Binary(b);
        //c=a&b的二進制補碼錶示爲:0000 0000 0000 0000 0000 0000 0000 0010
        int c = a & b;//十進制爲2
        System.out.println("a&b=" + c);
        print2Binary(c);
    }

運算結果:

十進制數[7]二進制補碼錶示爲:111
十進制數[2]二進制補碼錶示爲:10
a&b=2
十進制數[2]二進制補碼錶示爲:10
|運算符

|是OR運算符,是一種位符。有1爲1,全0爲0

  • 運算規則如下:
  • 1|1=1;
  • 1|0=0;
  • 0|1=0;
  • 0|0=0;
    /**
     * |是OR運算符,是一種位符。有1爲1,全0爲0
     * 運算規則如下:
     * 1|1=1;
     * 1|0=0;
     * 0|1=0;
     * 0|0=0;
     */
    @Test
    public void test02() {
        //a的二進制補碼錶示爲:0000 0000 0000 0000 0000 0000 0000 0111
        int a = 7;
        print2Binary(a);
        //b的二進制補碼錶示爲:0000 0000 0000 0000 0000 0000 0000 0010
        int b = 2;
        print2Binary(b);
        //c=a|b的二進制補碼錶示爲:0000 0000 0000 0000 0000 0000 0000 0111
        int c = a | b;//十進制爲7
        System.out.println("a|b=" + c);
        print2Binary(c);
    }

運算結果:

十進制數[7]二進制補碼錶示爲:111
十進制數[2]二進制補碼錶示爲:10
a|b=7
十進制數[7]二進制補碼錶示爲:111
^運算符

^是異或運算符,是一種位符。相同爲0,不同爲1

  • 運算規則如下:
  • 1^1=0;
  • 1^0=1;
  • 0^1=1;
  • 0^0=0;
    /**
     * ^是異或運算符,是一種位符。相同爲0,不同爲1
     * 運算規則如下:
     * 1^1=0;
     * 1^0=1;
     * 0^1=1;
     * 0^0=0;
     */
    @Test
    public void test03() {
        //a的二進制補碼錶示爲:0000 0000 0000 0000 0000 0000 0000 0111
        int a = 7;
        print2Binary(a);
        //b的二進制補碼錶示爲:0000 0000 0000 0000 0000 0000 0000 0010
        int b = 2;
        print2Binary(b);
        //c=a^b的二進制補碼錶示爲:0000 0000 0000 0000 0000 0000 0000 0101
        int c = a ^ b;//十進制爲5
        System.out.println("a^b=" + c);
        print2Binary(c);
    }

運算結果:

十進制數[7]二進制補碼錶示爲:111
十進制數[2]二進制補碼錶示爲:10
a^b=5
十進制數[5]二進制補碼錶示爲:101
~運算符

~是非運算符,是一種位符。0取反爲1,1取反爲0

  • 運算規則如下:
  • ~1=0;
  • ~0=1;
    /**
     * ~是非運算符,是一種位符。0取反爲1,1取反爲0
     * 運算規則如下:
     * ~1=0;
     * ~0=1;
     */
    @Test
    public void test04() {
        //a的二進制補碼錶示爲:0000 0000 0000 0000 0000 0000 0000 0111
        int a = 7;
        print2Binary(a);
        /**
         * b按位二進制補碼錶示爲 1111 1111 1111 1111 1111 1111 1111 1000
         * b的二進制原碼錶示則爲 1000 0000 0000 0000 0000 0000 0000 1000
         * 原碼的第一位爲符號位1代表負數,值爲-8
         */
        int b = ~a;
        System.out.println("~a取反爲:" + b);
        print2Binary(b);
    }

運算結果:

十進制數[7]二進制補碼錶示爲:111
~a取反爲:-8
十進制數[-8]二進制補碼錶示爲:11111111111111111111111111111000

其中打印二進制的方法print2Binary如下:

    /**
     * 打印十進制數二進制
     *
     * @param a
     */
    private void print2Binary(int a) {
        StringBuilder sb = new StringBuilder();
        sb.append("十進制數[");
        sb.append(a);
        sb.append("]二進制補碼錶示爲:");
        sb.append(Integer.toBinaryString(a));
        System.out.println(sb.toString());
    }

其他位運算:<< 、>>在《java位於算——一個測試搞懂位運算》中有做說明

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