1 異或定義
異或是一種位運行,數學符號記作 ⊕,在程序中記爲 ^
,如 a⊕b 或 a^b
。
異或滿足以下運行規則:
0⊕0=00⊕1=11⊕0=11⊕1=0
可以表示爲下表,其中行和列分別爲兩數。
我們可以簡單記憶爲兩數相同時返回0,不相同則返回1。
2 基本性質
設有兩個 a 和 b 邏輯位,它們有以下性質:
- 交換律:a⊕b=b⊕a;
∵ 所有四種運算全部滿足條件,∴ 結論成立。
- 結合律:(a⊕b)⊕c=a⊕(b⊕c);
a,b,c 共有 23=8 種取值情況,分別討論發現所有情況都滿足要求,因此結論成立。
- 不變性:a⊕0=a;
當 a=0 時,0⊕0=0
當 a=1 時,1⊕0=1
注意:a⊕1=1 不成立。
- 自毀性:a⊕a=0;
基本運算原則,相等爲1。根據這個原則,結合保身性,我們很容易等到:x⊕x⊕x=x,這個結論非常重要,在密碼學中的對稱加密中經常用到。
- 可替性:若 a⊕b=c,則 a⊕c=b(或 b⊕c=a);
證明: ∵a⊕b=c,∴a⊕c=a⊕a⊕b=0⊕b=b,證畢(同理,可證b⊕c=a)。
3 其他性質研究
計算機系統是基於二進制的存儲系統,最基本的單元是位(bit),每個位只表示0或1,但是由於存儲的便利,使用的是每8位爲一個單元的字節byte,所以在下面的討論中,都是基於字節的。由於更多的字節都是隻是對單字節的重複, 所以主要以研究單字節爲主。
3.2 基本定義
定義:求1函數 o=One(b),其中 One 表示字節 b 中 1的個數,記爲O(b)。定義 PO(b)=P(O(b)) 爲 b 超奇偶性,即 b 中1的個數是奇數還是偶數。
幾個函數的範圍情況如下所示。
- O(b):返回一個字節中1的個數。
定義域:[0, 256)
值域:[0, 8]
- P(b):判斷一個數的奇偶性
定義域:[0, 256)
值域:{ODD, EVEN} # 注:分別表示奇數和偶數。
- PO(b):判斷一個字節的超奇偶性
定義域:[0, 256)
值域:{ODD, EVEN}
3.1 PO(b) 超奇偶性性質
定理1:設 a⊕b=c,則 PO(a)⊕PO(b)=PO(c)。
證明:先考慮 a 和 b 只有一位的情況。此時,只有四種基本情況,如第1部分表格所示,這四種情況都成立,所以等式成立。由於各位之間都是獨立的,所以當 a 和 b 爲多位時,等式也成立。
根據這個結論,我們可以知兩個相同的字節的超奇偶性不同時,其異或結果的超奇偶性相同。但是如果兩者超奇偶性相同,則結果的超奇偶性不確定。
舉例來說,若 b1 和 b2 爲兩個相同長度的多位二進制數,兩個數中1的總個數爲 n,設 b1⊕b2=b3 且 b3 中的1的個數爲 m 個,那麼 n 與 m 的奇偶性是一樣的。如 b1=01010101,b2=10101101,b3=11111000,此時 n=9,m=5 都是奇數。