JAVA 位運算理解
java 的位運算子有&,| ,^,~,<<,>>,>>> 一共七個
位運算子是不支援浮點型別運算的,其中&,|,^ 這三個運算子可以支援boolean型別,其它4個不支援boolean型別
位運算一般用於整數的計算,主要針對二進位制的運算
& (與運算子)
兩個運算元中位數都為1,結果才為1,否則結果為0
例如:5 & 4
5 -> 101
4 -> 100
101
&
100
--------------
100
| (或運算子)
兩個運算元中只要有一個位數為1,結果就為1,否則為0
例如: 5 | 4
5 -> 101
4 -> 100
101
^
100
--------------
001
^(異或運算)
兩個運算元中只要兩個位數不相同就為1,否則為0
例如:5^4
101
^
100
--------------
001
~(取反運算)
正數:先將數值轉換成二進位制,在對二進位制數的每一位取反操作包括符號位,在取補碼,計算結果
此處以1位元組為例
例如:~5
5 轉換成二進位制:0000 0101
每一位取反:1111 1010
在取補碼:1000 0101 ,注意取補碼需要 +1
此時:1000 0110
結果為:-6
負數:先將數值轉換成二進位制,由於負數在計算機是以補碼的方式儲存,因此取補碼,在對每一位取反包括符號位,此時符號為正,在取補碼,計算得結果。
例如:~(-5)
-5轉換成二進位制:1000 0101
由於是負數,計算機以補碼的方式儲存,此時取補碼:1111 1011
在對每一位取反:0000 0100,
在取補碼,由於正數的補碼是其本身,因此為:0000 0100
結果為:4
取反的簡便計算公式:- (a + 1)
<< 左移運算
將數值轉換成二進位制,整體往左移動若干位,左邊超出部分捨棄,右邊補零
左移一位相當於乘於2的一次方,左移n位相當於乘於2的n次方(在沒有溢位的情況下)
例如: 5 << 1 = 10
↓
101 左移一位 1010 轉換成十進位制:10
如果移動超出位數出現溢位,計算結果錯誤
>>右移運算
將數值轉換成二進位制,整體往右移動若干位,左邊用原有的標誌位填充,右邊超出的捨棄
右移一位相當於除於2的一次方,右移n位相當於除於2的n次方(在沒有溢位的情況下)
例如:4 >> 1 = 2
↓
100 右移一位 10 轉換成十進位制:2