1. 程式人生 > >Java中的位運算子(運算元只能是整型和字元型資料)

Java中的位運算子(運算元只能是整型和字元型資料)

java中的位運算子有:左移(<<)、右移(>>)、無符號右移(>>>)、位與(&)、位或(|)、位非(~)、位異或(^),除位異或是一元操作符外,都是二元操作符。

(位運算的實質都是先將十進位制數轉化為二進位制在進行位運算)。

java中使用補碼來表示二進位制數,在補碼錶示中,最高位是符號位:0-正數,1-負數,補碼規則為:正數最高位是0,其餘的各位表示其數值本身;負數是該數值的絕對值的補碼安慰取反+1所得。

eg:1 對應二進位制為:

0000 0000 0000 0000 0000 0000 0000 0001

按位取反為:

1111 1111 1111 1111 1111 1111 1111 1110

+1後為:

1111 1111 1111 1111 1111 1111 1111 1111

所以-1 的二進位制為:1111 1111 1111 1111 1111 1111 1111 1111

同理,5的二進位制為:

0000 0000 0000 0000 0000 0000 0000 0101

按位取反為:

1111 1111 1111 1111 1111 1111 1111 1010

+1後為:

1111 1111 1111 1111 1111 1111 1111 1011

所以-5的二進位制為:1111 1111 1111 1111 1111 1111 1111 1011

在java中,int型別佔32位,有正負之分,正數轉化為二進位制後,最高位是0.負數轉化為二進位制後最高位是1,所以,當右移時,高位的補位遵守“正數補0,負數補1”,而無符號右移的話,不論正負,均用0補齊。之所以沒有無符號左移,是因為低位都用0補齊。

1. 左移(<<),eg: 5<<2

首先將5轉化為二進位制:

0000 0000 0000 0000 0000 0000 0000 0101

然後左移兩位,低位用0補齊:

0000 0000 0000 0000 0000 0000 0001 0100

轉化為十進位制數:20 。 所以, 5<<2 = 20

2. 右移(>>), eg: 5>>2(原理同左移一樣,之一高位的符號位補齊方法)

首先將5轉化為二進位制:

0000 0000 0000 0000 0000 0000 0000 0101

然後右移兩位,高位用0補齊:

0000 0000 0000 0000 0000 0000 0000 0001

轉化為十進位制數:1 。 所以5>>2 = 1

3. 無符號右移(>>>),eg: 5>>3,-5>>3,-5>>>3

5的二進位制:

0000 0000 0000 0000 0000 0000 0000 0101

右移三位:

0000 0000 0000 0000 0000 0000 0000 0000 (值位0)

-5的二進位制:

1111 1111 1111 1111 1111 1111 1111 1011

右移三位:

1111 1111 1111 1111 1111 1111 1111 1111(負數,高位用1補齊,值為-1)

無符號右移三位:

0001 1111 1111 1111 1111 1111 1111 1111(高位用1補齊,值為536870911)

4. 位與(&)、位或(|)、位異或(^)、位非(~)

都是先轉化為二進位制,然後二進位制按位進行異或運算。

a. 位與:按位進行與運算(同1為1,否則為0),eg:5&3

5的二進位制:

0000 0000 0000 0000 0000 0000 0000 0101

3的二進位制:

00000000 0000 0000 0000 0000 0000 0011

------------------------------------------------------

按位與運算:

0000 0000 0000 0000 0000 0000 0000 0001 (值為1)

所以,5&3 = 1

b. 位或:按位進行或運算(同0為0,否則為1),eg: 5|3

5的二進位制:

0000 0000 0000 0000 0000 0000 0000 0101

3的二進位制:

00000000 0000 0000 0000 0000 0000 0011

------------------------------------------------------

按位或運算:

0000 0000 0000 0000 0000 0000 0000 0111 (值為7)

所以,5|3 = 7

c. 位異或:按位異或(同位相同為0,相反為1),eg:5^3

5的二進位制:

0000 0000 0000 0000 0000 0000 0000 0101

3的二進位制:

00000000 0000 0000 0000 0000 0000 0011

------------------------------------------------------

按位異或運算:

0000 0000 0000 0000 0000 0000 0000 0110 (值為6)

所以,5^3 = 6

d. 位非:按位進行非運算,即按位取反,一元操作符。

5的二進位制:

0000 0000 0000 0000 0000 0000 0000 0101

位非:

1111 1111 1111 1111 1111 1111 1111 1010 (值為-6)

所以,~5 = -6

3的二進位制:

00000000 0000 0000 0000 0000 0000 0011

位非:

1111 1111 1111 1111 1111 1111 1111 1100 (值為-4)

所以,~3 = -4