java基礎學習筆記——day05(位運算,位移運算,運算符的優先級)

java基礎學習筆記——day05

上一篇續: 位運算符

  • ^、&、|、~、>>、<<、>>> 位運算都是基於二進制直接運算
  • 對應二進制: 1->true 0-> false

i. 按位異或 ^

  • 相同位0 ,不同爲1
^ 1 0
1 0 1
0 1 0

uMuNM4.png

  • 注意事項
    1. 兩個相同的數字進行 ^ 運算,其結果就是0
    2. 0和任何數字進行 ^ 運算,結果就是對應數字
    3. 兩個變量互相 ^ 三次,就可以互相交換位置

ii. 按位與 &

  • 只要有一個是0,結果就是0
& 1 0
1 1 0
0 0 0

uMKGTI.png

  • 注意事項
    • 二進制運算都是補碼運算
    • 一個數字如何按位&1,其結果爲1時那麼當前該數字後一位[二進制中]則爲1
    • 運算時符號位也會參與運算

iii. 按位或 |

  • 只要有一個是1,那就爲1
| 1 0
1 1 1
0 1 0

uMMyKe.png

  • 注意事項
    • 二進制運算都是補碼運算
    • 運算時符號位也會參與運算

iv. 按位取反 ~

  • 如果是1,則爲0,如果爲0,則爲1
~ 1 0
0 1
  • 注意:二進制運算都是補碼運算
System.out.println(~5);//結果是   -6
  • 解析:

uM16rF.png

v. 按位左移

  • 一個數字左移N位,相當於當前這個數字*2N次方
  • 當一個數字左移N位,而且N超過了數字類型的取值範圍,相當於左移 num<<(N%32)
  • 左移之後不論正負,都是通過 0 填充

uM3sJI.png

vi. 按位右移

  1. 當一個數字(a)右移N位之後,就是除以當前數字的除以2的N次方 a>>N => a/2^N
  2. 右移之後如果當前數字是正數,那麼填補空位通過 0 ,反之通過 1 填補,就是填補空位通過當前數 字的 符號位
  3. 當一個正數進行無符號右移操作時和右移操作的結果是一樣的。
  4. 當一個負數進行無符號右移操作時得出的結果一定是一個正數
  5. 無符號右移填補空位全部都是通過 0 填補。

uM3LOU.png

運算符的優先級

uM8Kpt.png

  • 單目>雙目>三目
    1. 先括號>算數>位>關係>邏輯>三目>擴展、賦值
    2. 算數: ++ – > * / % >+
    3. 關係: > < >= <= > == !=
  • 單目>雙目>三目
    1. 先括號>算數>位>關係>邏輯>三目>擴展、賦值
    2. 算數: ++ – > * / % >+
    3. 關係: > < >= <= > == !=
    4. 邏輯:! > & | ^ > && ||
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章