(轉)java中異或運算的應用

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章