Java中邏輯與,邏輯或,按位與,按位或的區分
阿新 • • 發佈:2019-02-12
一直以來,對這樣的概念很是模糊,今天總結了一下
先說說邏輯與(&&),邏輯或(||)
他們是短路形式的,舉例說明
int i = 0;
System.out.println ( i++ == 1 && i++ == 2);//列印false
System.out.println (i);//列印1
//這裡先判斷i++是否等於1,因為是右自增,所以這裡i++ == 1是錯誤的,短路就是說不用執行後面的i++ == 2了,
直接返回一個false,所以這就是最後結果為什麼列印1的原因了
i = 0;//這裡重新賦值,為了下面的例子明瞭
System.out.println ( ++i == 1 && i++ == 2);//列印false
System.out.println (i);//列印2
//而這裡剛好相反,++i是等於1的,所以就執行了後面的i++ == 2,最終的i的值也就列印2了
邏輯與是當兩邊的運算都為true時,才返回true,否則返回false,如果左邊返回false,就直接返回false,不再繼續執行右邊的程式碼了
邏輯或是隻要有左邊的時是true時,就返回true,不再執行右邊的程式碼,但如果左邊的值為false,則返回右邊運算的結果
按位與& 按位或|
它們和邏輯與,邏輯或是一樣的,區別就是非短路運算,即&運算子,即使左邊是false,也要執行右邊程式碼;|即使左邊是true,也要執行右邊程式碼
還有一點需要指出的區別就是
邏輯與,邏輯或在Java中運算子必須是boolean型別的,而按位與,按位或可以是int型別的,
下面我舉例說明他們是如何執行的
System.out.println( 5&3);//(程式碼1) 列印結果1
System.out.println( 5|3);//(程式碼2) 列印結果7
System.out.println( 4&2);//(程式碼3) 列印結果0
System.out.println( 4|2);//(程式碼4) 列印結果6
二進位制碼如下:
//5 101 4 100
//3 011 2 010
//& 001 000
//| 110 110
按位與的運算:
看註釋3對於註釋1和2,會發現除了兩位都是1的時候,其餘情況下&的結果都是0
按位或的運算:
兩個數中都為0的時候結果為0,否則結果為1