Java 位運 算 符
位元運算符用來對二進位位進行操作 ,Java中提 供 了 如 下所 示 的 位 運 算符 :
位 運 算 符 (>>,<<,>>>, & , |, ^ , ~ ) ,位運 算 符 中 ,除 ~ 以 外 ,其餘 均 為 二 元 運 算 符 。 操 作 數 只 能 為 整 型 和字 符 型 數 據 。
基礎知識
補碼
所有的整數類型(除了char 類型之外)都是有符號的整數。這意味著他們既能表示正數,又能表示負數。
Java使用 補 碼 來 表 示 二 進 制 數 ,在補 碼 表 示 中 ,最高 位 為 符號 位 ,正數 的 符 號 位 為 0,負數 為 1。補 碼 的 規 定 如 下 :
對 正 數 來 說 ,最高 位 為 0,其餘 各 位 代 表 數 值 本 身 (以二 進位 表 示 ),如 +42的補碼 為 00101010。
對 負 數 而 言 ,把該 數 絕 對 值 的 補 碼 按 位 取 反 ,然後 對 整 個數 加 1,即得 該 數的 補 碼 。 如 -42的補 碼 為 11010110 (00101010 按 位 取 反 11010101 +1=11010110 )
用 補 碼 來 表 示 數 ,0的補 碼 是 唯 一 的 ,都為 00000000。 (而在 原碼 ,反碼 表 示中 ,+0和 -0的表 示 是 不 唯 一 的 ,可參 見 相 應 的 書 籍 )。而 且 可 以用 111111表示 -1的補 碼 (這也 是 補 碼 與 原 碼 和 反 碼 的 區 別 )。
java 位元運算符:
~
按位非(NOT)(一元運算)
&
按位與(AND)
|
按位或(OR)
^
按位異或(XOR)
>>
右移
>>>
右移,左邊空出的位以0填充 ;無符號右移
<<
左移
&=
按位與賦值
|=
按位或賦值
^=
按位異或賦值
>>=
右移賦值
>>>=
右移賦值,左邊空出的位以0填充 ;無符號左移
<<=
左移賦值
按位非(NOT)
按位非也叫做補,一元運算子NOT“~”是對其運算數的每一位取反。例如,數字42,它的二進位代碼為:
0010 1010 42
經過按位非運算成為
1101 0101
按位與(AND)
按位與運算子“&”,如果兩個運算數都是1,則結果為1。其他情況下,結果均為零。看下面的例子:
0010 1010 42
&0000 1111 15
0000 1010 10
按位或(OR)
按位或運算子“|”,任何一個運算數為1,則結果為1。如下面的例子所示:
0010 1010 42
| 0000 1111 15
0010 1111 47
按 位異或運算子“^”,
只有在兩個比較的位不同時其結果是 1。否則,結果是零。 相異時結果是1 ,相同的是 0. 1* 0 =1 0* 1=1 ;
下面的例子顯示了“^”運算子的效果。這個例子也表明了XOR 運算子的一個有用的屬性。注意第二個運算數有數字1的位,42對應二進位代碼的對應位是如何被轉換的。第二個運算數有數字0的位,第一個運算數對應位的數 字不變。當對某些類型進行位元運算時,你將會看到這個屬性的用處。