1. 程式人生 > >Java基礎:&與&&,|與| |的聯絡與區別(詳解及示例)

Java基礎:&與&&,|與| |的聯絡與區別(詳解及示例)

&與&& 的聯絡與區別

一、&與&&的相同點

  &與&& 都可作為 邏輯“與”的運算,即當運算子兩邊表示式結果都為True時,運算結果返回True;否則當某一表達式為False時,運算結果返回False 。

二、&與&&的不同點

1、& :“按位與”

  “按位與”:就是說,當兩邊表示式不是判斷(a>b & a>c)而是數字如:1 & 8 ,‘&’就作為按位“與”運算;即將兩個數字進行二進位制位“與”運算:當兩個相應二進位制位都為1時,結果位為1

​   特別注意的是:"結果位為1,而不是結果返回1;也就是說 返回的結果是某個值而不僅僅是0或1

​   例如 :在java中int型別是4kb也就是32位;(略去前面幾位,只寫後4位或後8位)

  1 & 8:‘1’ 的二進位制表示為 0001 ;‘8’的二進位制表示為 1000 ;則1&8表示為 0001&1000 = 0000 ,再轉十進位制返回值為 0 ;

  23 & 15:‘23’的二進位制表示為 0001 0111 ;‘15’的二進位制表示為 0000 1111 ;則23&15表示為 0001 0111 & 0000 1111 = 0000 0111 ,轉十進位制返回值為 7

​ 上面例子只涉及到正數, 負數

也是相同的性質,但負數的二進位制是用補碼表示。那負數的二進位制如何表示:

  以 -9 為例:步驟如下(只講步驟,具體運算例項就不再詳述)

1.   -9 的絕對值:9的二進位制位 0000 1001, 稱該碼為**原碼**。

2.   上述‘原碼’的基礎上“取反”得:1111 0110 ,稱該碼為**反碼** 。

3.   最後在‘反碼’的基礎上“加1”得:1111 0111 ,稱該碼為**補碼**,即該碼為負數的二進位制表示。

2、&&: “短路與”

  這個很好理解。即當第一個表示式為False時,將不再執行第二個表示式(無論表示式是否丟擲異常),直接返回False。

  但需要注意的是:使用“&&”時,兩邊的表示式一定是判斷表示式即 返回的結果是True和False;若兩邊表示式為數值(1 && 8 或 8>1 && 8),將出現語法錯誤,程式編譯無法通過。



| 與 | | 的聯絡與區別(和上述&與&&原理相同)

一、 | 與 | | 的相同點

  | 與| | 都可作為 邏輯“或”的運算,即當運算子任意一個表示式結果為True時,運算結果返回True;僅當兩個表示式都為False時,運算結果返回False 。

二、| 與 | | 的不同點

 1. | :“按位或”

  和&類似,進行二進位制運算;但與&的區別是當表示式為數值時,將兩個數字進行二進位制位“或”運算:任意某個二進位制位為 1 時,結果位為 1

  例 7|8 :0111 | 1000 = 1111 ,轉換十進位制返回值為 15 。

  例 1|9 :0001 | 1001 = 1001,轉換十進位制返回值為 9 。(不再具體詳述,參考上述&“按位與”運算)

 2. | | :“短路或”

  當第一個判斷表示式為True時,不再執行後面的判斷表示式(第二個表示式不會執行),直接返回True。