C語言中文網 目錄

Java位運算符:Java移位運算符、復合位賦值運算符及位邏輯運算符

位運算符主要用來對操作數二進制的位進行運算。按位運算表示按每個二進制位(bit)進行計算,其操作數和運算結果都是整型值。

Java 語言中的位運算符分為位邏輯運算符和位移運算符兩類,下面詳細介紹每類包含的運算符。

位邏輯運算符

位邏輯運算符包含 4 個:&(與)、|(或)、~(非)和 ^(異或)。除了 ~(即位取反)為單目運算符外,其余都為雙目運算符。表 1 中列出了它們的基本用法。
表1 位邏輯運算符
運算符 含義 實例 結果
& 按位進行與運算 4 & 5 4
| 按位進行或運算 4 | 5 5
^ 按位進行異或運算 4 ^ 5 1
~ 按位進行取反運算 ~ 4 -5

位與運算符

位與運算符為 &,其運算規則是:參與運算的數字,低位對齊,高位不足的補零,如果對應的二進制位同時為 1,那么計算結果才為 1,否則為 0。因此,任何數與 0 進行按位與運算,其結果都為 0。

例如下面的表達式:
100&0

圖 1 所示為這個運算過程,結果為 0。


圖1 100 位與 0 的運算過程

下面是兩個非零的數字進行位與運算的過程。
int x=5,y=12;//創建整型變量保存兩個數
int z=x&y;//對這兩個數進行位與運算,結果保存到z

這兩行語句執行后變量 Z 的值是 4,圖 2 所示為這個運算過程。


圖2 5 位與 12 的運算過程

位或運算符

位或運算符為 |,其運算規則是:參與運算的數字,低位對齊,高位不足的補零。如果對應的二進制位只要有一個為 1,那么結果就為 1;如果對應的二進制位都為 0,結果才為 0。

下面是一個使用位或運算符的表達式。
11|7

運算結果為 15,圖 3 所示為其運算過程。


圖3 11 位或 7 的運算過程

位異或運算符

位異或運算符為 ^,其運算規則是:參與運算的數字,低位對齊,高位不足的補零,如果對應的二進制位相同(同時為 0 或同時為 1)時,結果為 0;如果對應的二進制位不相同,結果則為 1。

下面是一個使用位異或運算符的表達式。
11^7

運算結果為 12,圖 4 所示為其運算過程。


圖4 11 位異或 7 的運算過程

提示:在有的高級語言中,將運算符 ^ 作為求冪運算符,要注意區分。

位取反運算符

位取反運算符為 ~,其運算規則是:只對一個操作數進行運算,將操作數二進制中的 1 改為 0,0 改為 1。

下面是一個使用位取反運算符的表達式。
~10

運算結果為 65525,圖 5 所示為其運算過程。


圖5 對 10 位取反的運算過程

我們可以使用如下的程序來檢查這個運算結果。
int i=10;
System.out.printf("%d \n",~i);

編譯執行以上程序,會發現輸出的結果是 -11,而不是 65525。這是因為取反之后的結果是十六進制數,而在上面的程序中使用 %d 將輸出轉換為了十進制數。

可以使用如下語句查看十六進制結果。
int i=10;
System.out.printf("%x \n",~i);

可以看到輸出結果為 fff5,將它轉換為二進制是 1111111111110101。這個二進制數的最高位為 1,表示這個數為負數。除最高位外,按位取反再加 1,即得到二進制原碼 1000000000001011,用十進制數表示即為 -11。

注意:位運算符的操作數只能是整型或者字符型數據以及它們的變體,不用于 float、double 或者 long 等復雜的數據類型。

位移運算符

位移運算符用來將操作數向某個方向(向左或者右)移動指定的二進制位數。表 2 列出了 Java 語言中的兩個位移運算符,它們都屬于雙目運算符。
表2 位移運算符
運算符 含義 實例 結果
» 右移位運算符 8»1 4
« 左移位運算符 9«2 36

左位移運算符

左移位運算符為 «,其運算規則是:按二進制形式把所有的數字向左移動對應的位數,高位移出(舍棄),低位的空位補零。

例如,將整數 11 向左位移 1 位的過程如圖 6 所示。


圖6 對 11 左移 1 位運算過程

從圖 6 中可以看到,原來數的所有二進制位都向左移動 1 位。原來位于左邊的最高位 0 被移出舍棄,再向尾部追加 0 補位。最終到的結果是 22,相當于原來數的 2 倍。

右位移運算符

右位移運算符為 »,其運算規則是:按二進制形式把所有的數字向右移動對應的位數,低位移出(舍棄),高位的空位補零。

例如,將整數 11 向右位移 1 位的過程如圖 7 所示。


圖7 對 11 右移 1 位運算過程

從圖 7 中可以看到,原來數的所有二進制位都向右移動 1 位。原來位于右邊的最低位 1 被移出舍棄,再向最高位追加 0 補位。最終到的結果是 5,相當于原數整除 2 的結果。

復合位賦值運算符

復合位賦值運算符由賦值運算符與位邏輯運算符和位移運算符組合而成。表 3 列出了組合后的復合位賦值運算符。

表3 復合位賦值運算符
運算符 含義 實例 結果
&= 按位與賦值 num1 &= num2 等價于 num 1=num 1 & num2
\= 按位或賦值 num1 |= num2 等價于 num 1=num 1 | num2
^= 按位異或賦值 num1 ^= num2 等價于 num 1=num 1 ^ num2
~= 按位取反賦值 num1 ~= num2 等價于 num 1=num 1 ~ num2
«= 按位左移賦值 num1 «= num2 等價于 num 1=num 1 « num2
»= 按位右移賦值 num1 »= num2 等價于 num 1=num 1 » num2

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo