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

2022-09-17 18:27:12 字數 1081 閱讀 9297

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

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

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

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

0⊕0=0,0⊕1=1

1⊕0=1,1⊕1=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。

這題只要將所有數字異或即可得只出現一次的數字。而且這方法極大的節約了空間和時間。

關於new的一點筆記

必須delete用new建立物件的那個位址。而樓主pa getpointa 這樣其實已經改變了原來的那個new出來的位址,這時候delete就可能有問題了 如果getpointa返回的也是同一種型別的指標,且該指標也是被new出來的話,那麼delete pa這句話本身也不會出錯。否則,就錯了 另外,...

關於Binder的一點筆記

這個方法是用來將服務端的binder物件轉換成客戶端所需的aidl介面型別物件,這種轉換時區分程序的,那麼如何區分呢?咱們先做乙個實驗,建立乙個service,在乙個activity中繫結它,然後再將service設定為與activity同一程序和不再同一程序兩種情況,並列印出serviceconn...

關於git的一點筆記

很早的時候註冊了github,然後搞了一些自己寫的 上去,逐漸學會了使用git,但是目前也僅僅是乙個很淺的初級,覺得有必要記錄一下呵呵。1 在github上面建立乙個倉庫 2 git clone dddddd dir 轉殖到本地 3 git add 新增檔案到working memory 4 git...