java中異或運算(^)的應用
異或運算法則
1. a ^ b = b ^ a
2. a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c;
3. d = a ^ b ^ c 可以推出 a = d ^ b ^ c.
4. a ^ b ^ a = b.
異或運算
1、異或是一個數學運算符。應用於邏輯運算。
2、例如:真異或假的結果是真,假異或真的結果也是真,真異或真的結果是假,假異或假的結果是假。就是說兩個值相 異結果爲真。
異或的運算方法是一個二進制運算:
1^1=0
0^0=0
1^0=1
0^1=1
兩者相等爲0,不等爲1.
總之,就是這樣,n^0=n n^n=0,即任何數與0進行異或,爲它本身,兩個相同的數進行異或運算,會得到0。
前幾天看到一個這樣的題目,對於一個有多個數值的數組,只有一個是唯一的,其他都是成對的,怎樣快速找到這個唯一值。在我沒聽過異或運算的時候,真是一臉懵,但是後來在看hashMap源碼的時候看到了^ 異或運算符,搜了一下,才發現曾經看到的這道題的解題,頓時豁然開朗。
int[] numarry = new int[]{1,2,3,2,3};
int aim = numarry[0];
for(int i = 1; i < 5; i++)
{
aim = aim ^ numarry[i];
}
System.out.println("最後:"+aim);
關於上邊的這個結果是什麼,你只需要知道異或運算的特點就可以了,比如1,2,3,2,3 ,既然異或運算滿足上邊的交換規則,對於1^2^3^2^3 這樣的異或運算,我們換一下位置(2^2)^(3^3)^1 ,通過兩個相同的數進行異或運算得到0 ,那最終就會是0^0^1 ,最後會得到1 。
另外,還看到一個差不多的題,如下:
1-1000放在含有1001個元素的數組中,只有唯一的一個元素值重複,其它均只出現一次。每個數組元素只能訪問一次,設計一個算法,將它找出來;不用輔助存儲空間,能否設計一個算法實現?
上邊這個也可以用異或運算進行解題:
假設:1^2^3......^n.....^1000=T
而: 1^2^3......^n^n.....^1000 = T^n
我們已經知道T^T^n = 0^n = n這樣的過程。
所以,我們對於上邊的解題辦法就有了:
首先對1到1000,這1000個數進行異或運算,然後再把上邊的1001個數進行疑惑運算,最後,再對這兩個結果進行異或運算,就會得到唯一的那個n。
————————————————
版權聲明:本文爲CSDN博主「JAVA碼上飄」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/wohaqiyi/article/details/80931693