1. 程式人生 > >java按位運算子中的異或

java按位運算子中的異或

java中用到按位運算子時,就是按照單個位元流,即二進位制位。會將兩個資料都轉換成二進位制的形式來將進行異或、或、與、非等操作。

按位運算的來源於C的低階操作。

作用:我們經常要操縱硬體,需要頻繁設定硬體暫存器內的二進位制位。Java的設計初衷是嵌入電視頂置盒內,所以這種低階操作被保留下來了。然而,由於作業系統的進步,現在也很少用到這種按位運算。

接下來就說異或,之前聽的很多就是關於或、與、非的運算講解和實踐,現在也針對異或來進行了解並實踐,讓學到的東西能清楚些。

異或(XOR):相同為0,不同為1。

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

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

            0000 ^ 0011 = 0011這個得到的結果是相同的。

借鑑別人寫的例子:

  很多成對出現數字儲存在磁碟檔案中,注意成對的數字不一定是相鄰的,如2, 3, 4, 3, 4, 2……,由於意外有一個數字消失了,如何儘快的找到是哪個數字消失了? 

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

     有一個數字消失了,那必定有一個數只出現一次而且其它數字都出現了偶數次。用搜索來做就沒必要了。

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

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

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