異或(異或運算)

異或

異或運算一般指本詞條

異或,英文為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、EX-OR

程式中有兩種演運算元:XOR、⊕。

使用方法如下

z = x ⊕ y

z = x xor y

基本介紹

  • 中文名:異或
  • 外文名:exclusive OR
  • 數學符號:⊕
  • 英文簡稱:xor
  • 程式符號:^
運算法則,邏輯,作用,巧用,與加減運算的關係,

運算法則

1. 歸零律
2. 恆等律
3. 交換律
4. 結合律
;
5. 自反
.
6. d = a ⊕ b ⊕ c 可以推出 a = d ⊕ b ⊕ c.
7.若x是二進制數0101,y是二進制數1011;
則x⊕y=1110
只有在兩個比較的位不同時其結果是1,否則結果為0
即“兩個輸入相同時為0,不同則為1”
a
b
a⊕b
0
0
0
0
1
1
1
0
1
1
1
0

邏輯

邏輯表達式
異或邏輯的真值表如圖1所示。
其邏輯符號如圖2所示。
異或
異或邏輯的關係是:當AB不同時,輸出P=1;當AB相同時,輸出P=0。“⊕”是異或運算符號,異或邏輯也是與或非邏輯的組合,其邏輯表達式為:
P=A⊕B
由圖1可知,異或運算的規則是
0⊕0=0,0⊕1=1
1⊕0=1,1⊕1=0
異或
圖2
口訣1:相同取0,相異取1
口訣2:
輸入A取0,則輸出p=輸入B
輸入A取1,則輸出p=輸入B的反
事實上,XOR 在英文裡面的定義為either one (is one), but not both, 也即只有一個為真(1)時,取真(1)。

作用

在計算機中普遍運用,異或(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++語言(C++支持xor,用法和效果如'^'相同)的異或不用xor,而是用“^”,鍵入方式為Shift+6。(而其它語言的“^”一般表示乘方)
若需要交換兩個變數的值,除了通常使用的借用中間變數進行交換外,還可以利用異或,僅使用兩個變數進行交換,如:
void swap(int &a,int &b)
{
    a=a^b;
    b=b^a;
    a=a^b;
}
詳解:
a1=a^b
b=b^a1=b^a^b=a
//此時a1=a^b  b=a
a=a1^a=a^b^a=b
注意:
a=a^b^(b=a);//此類形式是不正確的UB行為,在不同編譯器中會有不同的結果,切勿使用
這樣就完成了a與b的交換。
綜上:同一變數與另一變數和其異或值異或等於另一個數,如(a^b)^b=a。
用例:可使用於加密算法某一環節或更多環節,使算法更複雜,不易被破解,安全性更高。

與加減運算的關係

在伽羅華域上加減運算等價,即異或運算。而乘除直接進行多項式乘除然後對本原多項式取模。

相關詞條

熱門詞條

聯絡我們