運算子(二)按位異或運算子與左,右移位運算子

2021-09-29 06:52:07 字數 1135 閱讀 7512

規則:相同為0,不同為1。

有時兩個資料在異或後得到的結果跟兩個資料的值不同,有時會跟兩個值中某乙個值相同。所以在用的時候應該考慮清楚。

比如:0010 ^ 0001 = 0011 這個得到的結果是不同。

0000 ^ 0011 = 0011這個得到的結果是相同的。
很多成對出現數字儲存在磁碟檔案中,注意成對的數字不一定是相鄰的,如2, 3, 4, 3, 4, 2……,由於意外有乙個數字消失了,如何盡快的找到是哪個數字消失了?

答案:這個用異或就可以解決。因為相同為0,就是自己與自己異或為0。還有異或可以滿**換律,不同順序怎麼變換得到的結果都是相同的。

按位運算子可與等號聯合使用。但是非(~)就不可以了。

我們將boolean(布林)型別當做一種「單位」或者「單位元 」值對待,所以它多少有些比其他值特殊處。有多個boolean值時,可以執行按位與,或和異或,但是不能執行按位非,這樣可能為了避免與邏輯not混淆吧。

對於布林值,按位運算子與邏輯運算子有相同的效果,只不過是不會中途「短路」。針對布林值進行的按位運算為我們新增乙個xor邏輯運算子,但是它並沒有包括在邏輯運算子的列表中。在移位運算子中,禁止使用布林運算。

左移運算子用「<<」表示,是將運算子左邊的物件,向左移動運算子右邊指定的位數,並且在低位補零。其實,向左移n 位,就相當於乘上2 的n 次方,例如下面的例子。

public class data17

}執行結果

a 移位的結果是:4

分析上面的程式段:從本質上來分析,16 的二進位制是00010000,它向右移動2 位,就變成了00000100,即4。如果從另乙個角度來分析,它向右移動2 位,其實就是除以2 的2 次方,結果還是4。

帶符號的右移運算子用符號「>>」表示,是將運算子左邊的運算物件,向右移動運算子右邊指定的位數。如果是正數,在高位補零,如果是負數,則在高位補1,先看下面乙個簡單的例子。

public class data19

}執行結果

a 的移位結果:4

c 的移位結果:-4

分析上面的程式段:

a 的值是16,轉換成二進位制是00010000,讓它右移兩位成00000100 即4。

c 的值是-16,轉換成二進位制是11101111,讓它右移一位成11111011 即-4。

按位異或運算子

參與運算的兩個值,如果兩個相應位相同,則結果為0,否則為1。即 0 0 0,1 0 1,0 1 1,1 1 0 例如 10100001 00010001 10110000 0 0 0,0 1 1 0異或任何數 任何數 1 0 1,1 1 0 1異或任何數 任何數取反 任何數異或自己 把自己置0 1 ...

按位異或運算子

2 實現兩個值的交換,而不必使用臨時變數。例如交換兩個整數a 10100001,b 00000110的值,可通過下列語句實現 a a b a 10100111 b b a b 10100001 a a b a 00000110 3 在組合語言中經常用於將變數置零 xor a,a 1 static i...

異或運算子和位運算子詳解

一.異或運算子 1.異或運算子是用符號 表示的,其運算規律是 轉換成二進位制的形式來對比每一位數,相同則結果為0,不同則結果為1。分析 a 的值是15,轉換成二進位制為 1111,而b 的值是2,轉換成二進位制為 0010,根據異或的運算規律,可以得出其結果為 1101 即最終 a b的值為13 二...