程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> Java 邏輯運算符、位運算符、移位操作符 總結(Java 學習中的小記錄),運算符操作符

Java 邏輯運算符、位運算符、移位操作符 總結(Java 學習中的小記錄),運算符操作符

編輯:JAVA綜合教程

Java 邏輯運算符、位運算符、移位操作符 總結(Java 學習中的小記錄),運算符操作符


Java 邏輯運算符、位運算符、移位操作符  總結     作者:王可利(Star·星星)

 

 

邏輯運算符,表格如下:

 

解析邏輯運算符表:

1.與 (&) 

特點:兩個都為真的時候,結果為真。兩個為假的時候,結果為假。如果存在一個是假的,結果都為假的。

2.或(|)

特點:兩個都為真的時候,結果為真。兩個都為假的時候都是假的。如果存在一個是真的,結果都為真的。

3.異或(^)

特點:異,表示不一樣的意思。所以兩個判斷都是一樣的情況下,結果為假。兩個判斷結果都是不一樣的情況下,結果為真的。

4.非(!)

特點:取非,如果是真的,那麼結果就為假的。如果是假的,那麼結果就為真的。

5.雙與(&&)、雙或 (||)  ——>短路

特點:

在java裡面,單個與(或) 和  兩個與(或)運算方式是不一樣,結果是一樣的。

單個與(或)會把所有的條件都判斷一次,運算方式,不管第一個條件是假的還是真的,都會把後面的條件判斷完了之後再輸出結果。

兩個與(或),如果第一個數是真的,或者是假的就直接運行了,就不會再判斷後面的條件,但是輸出的結果真假和單與(或)沒什麼不一樣。

所以單個與(或)要比 兩個 兩個與(或)效率稍微高了一點。

 

位運算符

 介紹:任何信息在計算機中都是以二進制的形式保存的,與(&)、或(|)、異或(^)除了可以作為邏

    輯運算符也可以作為位運算符。位運算是直接對二進制進行運算。

位(bit)運算符:

 

位運算符

 

運算符含義

 

&

與(AND)

|

或(OR)

^

異或

~

取反

規則:非零即真,所以 1 為 true ,0 為 false

參考邏輯運算符可以得出以下結論:

    只有參與運算的兩位都為1,&運算的結果才為1,否則就為0。

    只有參加運算的兩位都是0,| 運算的結果才是0,否則都是1。

    只有參加運算的兩位不同,^ 運算的結果才為1,否則就為0。

1與運算

& 參見運算的兩位數都為1,&運算符結果才為1,否則就為0。

6 & 3

00000000

00000000

00000000

00000110

6

00000000

00000000

00000000

00000011

3

00000000

00000000

00000000

00000010

& = 2

 

 

 

 

 

2| 或運算

| 參與運算的兩位都為0,|運算的結果才為0,否則就為1。

6 & 3

00000000

00000000

00000000

00000110

6

00000000

00000000

00000000

00000011

3

00000000

00000000

00000000

00000111

| = 7

 

 

 

 

 

3^ 異或運算

^只有參加運算的兩位不同,^運算的結果才為1,否則就為0。

6 & 3

 

00000000

00000000

00000000

00000110

6

00000000

00000000

00000000

00000011

3

00000000

00000000

00000000

00000101

^ = 5

 

 

 

 

 

4、~ 反碼

就是取反,二進制只有1和0,取反就是如果為1,取反就是0,如果是0,取反就是1。

0000-0000

0000-0000

0000-0000

0000-0110

6

1111-1111

1111-1111

1111-1111

1111-1001

取反 -7

 

 

 

System.out.println(~6);//-7

結論:當參與取反的數值是正數時,把對應的值加上負號,再-1;

     當參與取反的數值是負數時,把對應的值加上負號,再-1;

負數的表現形式就是對應的正數取反,再加1。負數的最高位肯定是1。

負數表示

負數對應的正數的二進制-1,然後取反。

-6

 

0000-0000

0000-0000

0000-0000

0000-0110

6

1111-1111

1111-1111

1111-1111

1111-1001

取反

1111-1111

1111-1111

1111-1111

1111-1010

加1

 

 

 

 

 

5、異或特點

一個數異或同一個數兩次,結果還是那個數.  用處一個簡單的加密思想.

6^3^3

 

0000-0000

0000-0000

0000-0000

0000-0110

6

0000-0000

0000-0000

0000-0000

0000-0011

^3

0000-0000

0000-0000

0000-0000

0000-0101

前面的結果

0000-0000

0000-0000

0000-0000

0000-0011

^3

0000-0000

0000-0000

0000-0000

0000-0110

結果是6

 

 

 

 

 

 

 

移位操作符

表格如下:

位運算符

 運算符

 運算

 范例

 << 

 左移

 3 << 2 = 12 --> 3*2*2=12

 >> 

 右移

 3 >> 1 = 1  --> 3/2=1

 >>> 

 無符號右移

 3 >>> 1 = 1 --> 3/2=1

 &

 與運算

 6 & 3 = 2

 |

 或運算

 6 | 3 = 7

 ^

 異或運算

 6 ^ 3 = 5

 ~

 反碼

 ~6 = -

 

位運算符的細節

 << 

 空位補0,被移除的高位丟棄,空缺位補0。

 >> 

 被移位的二進制最高位是0,右移後,空缺位補0;

 最高位是1,空缺位補1。

 >>> 

 被移位二進制最高位無論是0或者是1,空缺位都用0補。

 &

 二進制位進行&運算,只有1&1時結果是1,否則是0;

 |

 二進制位進行 | 運算,只有0 | 0時結果是0,否則是1;

 ^

 任何相同二進制位進行 ^ 運算,結果是0。   1^1=0 , 0^0=0

 不相同二進制位 ^ 運算結果是1。  1^0=1 , 0^1=1

解析表內容:

1、左移(算術移位)

3 << 2 

首先將3轉換為2進制,

00000000

00000000

00000000

00000011

3 的二進制

00000000

00000000

00000000

000011

左移2位,砍掉高位

0000 0000

0000 0000

0000 0000

0000 1100

低位補0

             

 

 

 

 

 

 

結果是12,所以3<<2 = 12;

結論:左移就相當於乘以2的位移個數次冪.

2、右移

6>>2

 00000000

00000000

00000000

00000110

6的二進制

000000

00000000

00000000

00000001

右移10被砍掉

 00000000

00000000

00000000

00000001

高位補0

             

 

 

 

 

 

 

結果是1,所以6>>2 = 1;

結論:右移兩位就是除以 2的2次方,右移一位就是除以 2的一次方。一個數往左移越移越大,往右邊移越來越小。

 

3、無符號右移(邏輯移位)

通過演示發現右移時高位就空了出來,>> 右移時高位補什麼要按照原有數據的最高位來決定。

1111-1111 1111-1111 1111-1111 1111-1010    -6 >> 2

1111-1111 1111-1111 1111-1111 1111-0010   

最高位補什麼要看原有最高位是什麼

那麼使用>> 後原來是最高位1 的那麼空出來的最高位還是1 的,是0的還是0。

如果使用>>> 無論最高位是0還是1 空余最高位都拿0 補,這就是無符號右移。

1111-1111 1111-1111 1111-1111 1111-1010    -6 >>> 2

001111-1111 1111-1111 1111-1111 1111-10   

 

結果是;1073741822 

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved