異或
數學運算符號
異或,英文為exclusive OR,縮寫成xor
異或(xor)是一個數學運算符。它應用於邏輯運算。異或的數學符號為“⊕”,計算機符號為“xor”。其運演演算法則為:
a⊕b = (¬a ∧ b) ∨ (a ∧¬b)
如果a、b兩個值不相同,則異或結果為1。如果a、b兩個值相同,異或結果為0。
異或也叫半加運算,其運演演算法則相當於不帶進位的二進位加法:二進位下用1表示真,0表示假,則異或的運演演算法則為:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同為0,異為1),這些法則與加法是相同的,只是不帶進位,所以異或常被認作不進位加法。
異或略稱為XOR、EOR、EX-OR
程序中有三種演運算元:XOR、xor、⊕。
使用方法如下
z = x ⊕ y
z = x xor y
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.
6.若x是二進位數0101,y是二進位數1011;
則x⊕y=1110
只有在兩個比較的位不同時其結果是1,否則結果為0
即“兩個輸入相同時為0,不同則為1”!
輸入 | 運算符 | 輸入 | 結果 |
1 | ⊕ | 1 | |
1 | ⊕ | 1 | |
⊕ | |||
⊕ | 1 | 1 |
邏輯表達式:F=AB’⊕A’B((AB’⊕A’B)’=AB⊙A’B’,⊙為“同或”運算)
異或邏輯的真值表如 圖1所
異或
P=A⊕B
由圖1可知,異或運算的規則是
0⊕0=0,0⊕1=1
1⊕0=1,1⊕1=0
口訣1:相同取0,相異取1
口訣2:
輸入A取0,則輸出p=輸入B
輸入A取1,則輸出p=輸入B的反
異或
在計算機中普遍運用,異或(xor)的邏輯符號一般用xor,也有用⊕的:
真⊕假=真
假⊕真=真
假⊕假=假
真⊕真=假
或者為:
True ⊕ False = True
False ⊕ True = True
False ⊕ False = False
True ⊕ True = False
部分計算機語言用1表示真,用0表示假,所以兩個位元組按位異或如下
00000000 | |
xor | 00000000 |
------------- | |
結果 | 00000000 |
下面是兩個二進位數值進行異或計算:
11111111 | |
xor | 00000000 |
-------------- | |
結果 | 11111111 |
現實中用的都是十進位的數值,那麼我們來看一看兩個十進位數值是怎麼進行異或計算:
5 ⊕ 3 = ?
1.進行異或計算前會把數值都轉換為二進位:
5和3轉為二進位分別為:0101 、0011
0101 | |
xor | 0011 |
-------- | |
結果 | 0110 |
2.再把結果 0110 轉換為十進位的:6
3.所以 5 ⊕ 3 = 6
與其它語言不同,C語言和C++語言的異或不用xor,而是用“^”,鍵入方式為Shift+6。(而其它語言的“^”一般表示乘方)
若需要交換兩個變數的值,除了通常使用的借用中間變數進行交換外,還可以利用異或,僅使用兩個變數進行交換,如:
詳解:
注意:
這樣就完成了a與b的交換。
綜上:同一變數與另一變數和其異或值異或等於另一個數,如(a^b)^b=a。
用例:可使用於加密演演算法某一環節或更多環節,使演演算法更複雜,不易被破解,安全性更高。
在伽羅華域上加減運算等價,即異或運算。而乘除直接進行多項式乘除然後對本原多項式取模。