1. 程式人生 > 實用技巧 >邏輯與,邏輯或,邏輯異或;按位與,按位或,按位異或

邏輯與,邏輯或,邏輯異或;按位與,按位或,按位異或

邏輯與:兩邊的表示式有一項為假,結果就為假。兩邊的表示式全為真,結果才為真。
邏輯或:  兩邊的表示式有一項為真,結果就為真。兩邊的表示式全為假,結果才為假。
邏輯異或:真假為真,真真為假,假假為假。
==============================================
按位與:兩個二進位制對應的位都為1,結果為1,否則為0
按位或:兩個二進位制對應的位都為0,結果為1,否則為1
按位異或:兩個二進位制對應的位相同為0,相反為1

  

符號表達:

邏輯與  邏輯或  邏輯異或

按位與  按位或  按位異或

  &     |       ^

說明:很多人不容易理解這些符號的說明,就很迷糊,這裡我用簡單的語言進行說明,看完相信你會有所收穫!

    邏輯:帶有這兩個字的通常就是兩個boolean表示式的運算。比如:(3>5) & (1<2)

    按位:帶有這兩個字的通常是十進位制數或者二進位制數的運算。比如:3 | 5

解釋說明:

  這是我自己總結的,相信在日常的編碼中你能夠更深的理解這些程式碼的意思。

邏輯與:兩邊的表示式有一項為假,結果就為假。兩邊的表示式全為真,結果才為真。
邏輯或:  兩邊的表示式有一項為真,結果就為真。兩邊的表示式全為假,結果才為假。
邏輯異或:真假為真,真真為假,假假為假。
==============================================
按位與:兩個二進位制對應位都為1時,結果為1,否則結果為都0
按位或:兩個二進位制對應位都為0時,結果為0,否則結果為都1
按位異或:兩個二進位制對應位相同時,結果為0,否則結果為1

程式碼演示:

一個數轉二進位制的方法,這裡就不再進行闡述。可以自行查閱文件進行學習。

我們先看邏輯操作這邊的程式碼:

        int a = 5;//0000 0101
        int b = 3;//0000 0011
        System.out.println("邏輯與:" + ((a > b) & (b > 3)));
        System.out.println("邏輯或:" + ((b > 3) | (a > b)));
        System.out.println("邏輯異或:" + ((a > 3) ^ (b > 5)));
        System.out.println("邏輯異或:" + ((a > 3) ^ (b < 5)));
        System.out.println("邏輯異或:" + ((a < 3) ^ (b > 5)));
-----------------------------------------------------------------------    
結果為:
邏輯與:false
邏輯或:true
邏輯異或:true
邏輯異或:false
邏輯異或:false

按位這邊的程式碼:

        int a = 5;//0000 0101
        int b = 3;//0000 0011
        System.out.println("按位與:" + (3 & 5));//0000 0001
        System.out.println("按位或:" + (3 | 5));//0000 0111
        System.out.println("按位異或:" + (3 ^ 5));//0000 110    
=========================================
結果為:自行驗算上邊的二進位制轉為十進位制的數
按位與:1
按位或:7
按位異或:6

拓展1:&= , |= , ^=

在有些地方我們有可能會見到這樣的符號:&= , |= , ^=

這樣的符號其實就是一個賦值類的操作。

我們來舉個例子:

        int a = 5;//0000 0101
        int b = 3;//0000 0011
        a ^= b;
        System.out.println(a);//a = a^b

  其實這個跟我們學過的+=是一個意思。

擴充套件2:java中用方法進行進位制轉換

        //十進位制轉成十六進位制:
        System.out.println(Integer.toHexString(10));
        //十進位制轉成八進位制
        System.out.println(Integer.toOctalString(10));
        //十進位制轉成二進位制
        System.out.println(Integer.toBinaryString(10));
        //十六進位制轉成十進位制
        System.out.println(Integer.valueOf("FFFF", 16).toString());
        //八進位制轉成十進位制
        System.out.println(Integer.valueOf("010", 8).toString());
        //二進位制轉十進位制
        System.out.println(Integer.valueOf("0101", 2).toString());
        //將2、8、16進位制直接轉為10進位制
        System.out.println(Integer.parseInt("1010",2));
        System.out.println(Integer.parseInt("012",8));
        System.out.println(Integer.parseInt("FFFF",16));