1. 程式人生 > >JAVA 位運算理解

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

>>> 無符號右移運算