java基礎學習筆記——day05
上一篇續: 位運算符
- ^、&、|、~、>>、<<、>>> 位運算都是基於二進制直接運算
- 對應二進制: 1->true 0-> false
i. 按位異或 ^
- 相同位0 ,不同爲1
^ | 1 | 0 |
---|---|---|
1 | 0 | 1 |
0 | 1 | 0 |
- 注意事項
- 兩個相同的數字進行 ^ 運算,其結果就是0
- 0和任何數字進行 ^ 運算,結果就是對應數字
- 兩個變量互相 ^ 三次,就可以互相交換位置
ii. 按位與 &
- 只要有一個是0,結果就是0
& | 1 | 0 |
---|---|---|
1 | 1 | 0 |
0 | 0 | 0 |
- 注意事項
- 二進制運算都是補碼運算
- 一個數字如何按位&1,其結果爲1時那麼當前該數字後一位[二進制中]則爲1
- 運算時符號位也會參與運算
iii. 按位或 |
- 只要有一個是1,那就爲1
| | 1 | 0 |
---|---|---|
1 | 1 | 1 |
0 | 1 | 0 |
- 注意事項
- 二進制運算都是補碼運算
- 運算時符號位也會參與運算
iv. 按位取反 ~
- 如果是1,則爲0,如果爲0,則爲1
~ | 1 | 0 |
---|---|---|
0 | 1 |
- 注意:二進制運算都是補碼運算
System.out.println(~5);//結果是 -6
- 解析:
v. 按位左移
- 一個數字左移N位,相當於當前這個數字*2N次方
- 當一個數字左移N位,而且N超過了數字類型的取值範圍,相當於左移 num<<(N%32)
- 左移之後不論正負,都是通過 0 填充
vi. 按位右移
- 當一個數字(a)右移N位之後,就是除以當前數字的除以2的N次方 a>>N => a/2^N
- 右移之後如果當前數字是正數,那麼填補空位通過 0 ,反之通過 1 填補,就是填補空位通過當前數 字的 符號位
- 當一個正數進行無符號右移操作時和右移操作的結果是一樣的。
- 當一個負數進行無符號右移操作時得出的結果一定是一個正數
- 無符號右移填補空位全部都是通過 0 填補。
運算符的優先級
- 單目>雙目>三目
- 先括號>算數>位>關係>邏輯>三目>擴展、賦值
- 算數: ++ – > * / % >+
- 關係: > < >= <= > == !=
- 單目>雙目>三目
- 先括號>算數>位>關係>邏輯>三目>擴展、賦值
- 算數: ++ – > * / % >+
- 關係: > < >= <= > == !=
- 邏輯:! > & | ^ > && ||