關於異或(Xor)的一點筆記


因為博弈論里,尤其實在求sg函數時,經常會用到異或運算,所以我就把網上搜到的一些相關知識和自己的一些理解記下來。

如果出現差錯,還請指出,謝謝!

 

異或:可以簡稱Xor,可以用數學符號⊕表示,計算機就一般可以用^表示了。

異或運算主要指二進制中。

  00=0, 01=1
  10=1,11=0
可以看成是兩個值相同得0,不同得1。
另一種求值方法就是兩數相加,但是不進位,如1⊕1=0,可以看作1+1=10,但是不進位,所以1⊕1=0。
 
關於一些運算法則
1. a ⊕ a = 0
2. a ⊕ b = b ⊕ a
3. a ⊕b ⊕ c = a ⊕ (b ⊕ c) = (a ⊕ b) ⊕ c;
4. d = a ⊕ b ⊕ c  可以推出 a = d ⊕ b ⊕ c.
5. a ⊕ b ⊕ a = b.
 
我舉例說明一下法則5的運用。
例題:已知一串只含大於0的int型整數的數字,其中大部分數都出現了兩次,但只有一個數只出現了一次,求這個數的值。
     如5 5 3 2 2 1 3,數字5,3,2都出現了兩次,而只有1只出現了一次,所以這串數字的答案為1。又如3,4,5,5,4,2,3 的答案為2。
對於這題,可以使用hash數組,但可能會使用過大的空間。如果用異或就簡單許多了。因為a⊕a=0; 0⊕b=b;a⊕b⊕a=b;
如5 5 3 2 2 1 3求異或  5 ⊕ 5 ⊕ 3 ⊕ 2 ⊕ 2 ⊕ 1 ⊕ 3 = 5 ⊕ 5 ⊕ 3 ⊕ 3 ⊕ 2 ⊕ 2 ⊕ 1 = 0 ⊕ 0 ⊕ 0 ⊕ 1 = 1;數列中出現兩次的數5,3,2在異或都將得出0,因此得出只出現一次的數字1。
這題只要將所有數字異或即可得只出現一次的數字。而且這方法極大的節約了空間和時間。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM