跳转到内容

逻辑异或

本页使用了标题或全文手工转换
维基百科,自由的百科全书
(重定向自XOR)
p⊕q 的文氏图

互斥或(英語:Exclusive or),縮寫為XOR、EOR或EX-OR,是数字逻辑中,逻辑算符对两个运算元的一种邏輯分析类型。与一般的邏輯或不同,當兩兩數值相同時為否,而數值不同時為真。[1]

对于命题 p,q,p异或q通常记作pXOR⁡q或p⊕q。在编程语言中,常写作p ^ q。

逻辑异或相当于逻辑不等价,或者说逻辑异或的逻辑非是逻辑等价。

真值表

[编辑]

异或运算p⊕q的真值表如下:

p q p⊕q
True True False
True False True
False True True
False False False
注:True:真,False:假。

无论怎样改变同一行中p,q,p⊕q的位置,真值表都是成立的。

其他表示

[编辑]

在数学和工程学中,常常用其他的逻辑运算符来表示异或算符。异或算符可以使用逻辑算符逻辑与∧,逻辑或∨和逻辑非¬表示为:

p⊕q=(p∧¬q)∨(¬p∧q)=pq‾+p‾q=(p∨q)∧(¬p∨¬q)=(p+q)(p‾+q‾)=(p∨q)∧¬(p∧q)=(p+q)(pq‾)

另外,异或算符可以被推广,得到关于n个运算元的异或运算:n个运算元的n维异或的值为真当且仅当其中值为真的运算元有奇数个。

异或也可以被表示为:

p⊕q=¬((p∧q)∨(¬p∧¬q))

异或还可以看作是逻辑等价关系的非运算。

性质

[编辑]

交换律:p⊕q=q⊕p

结合律:p⊕(q⊕r)=(p⊕q)⊕r

恒等律:p⊕0=p

归零律:p⊕p=0

对合运算:p⊕q⊕q=p⊕0=p

与抽象代數的關係

[编辑]

尽管算子∧(逻辑合取)与∨(逻辑析取)是逻辑系统中最为常见的算子,但结构上,系统({T,F},∧) and ({T,F},∨)只是幺半群。因此,这两个系统无法合成为一个更大的结构,比如环或半环。

但是,带有逻辑异或的系统({T,F},⊕)是一个交换群。因此,算子∧与⊕的结合在集合{T,F}上作用就产生了最基本的二元域F2。这个域可以得出所有运用(∧,∨)可以得到的结果,并且由于附带了域的结构,可以进行代数上的进一步分析。

類似符號

[编辑]
名稱 符號 Unicode 圖形 符號的來源
地球 🜨 U+2295 地球的天文符號 带有赤道和一條經線的球體

應用

[编辑]

使用异或运算交换两个 int 类型变量的数值

[编辑]

C/C++

void swap(int *a, int *b) {
    *a ^= *b;
    *b ^= *a;
    *a ^= *b;
}

Java

public void swap(int a, int b) {
    a ^= b;
    b ^= a;
    a ^= b;
}

C#

public void swap(ref int a,ref int b)
{
    a ^= b;
    b ^= a;
    a ^= b;
}

Rust

fn swap<'a, 'b>( num_a: &'a mut i32, num_b: &'b mut i32 ) {
    *num_a ^= *num_b;
    *num_b ^= *num_a;
    *num_a ^= *num_b;
}

雖然XOR運算可用來交換變數,但比起使用額外變數來交換變數的做法相比,效能反而比較差。

参考来源

[编辑]
  1. ^ Germundsson, Roger; Weisstein, Eric. XOR. MathWorld. Wolfram Research. [17 June 2015]. (原始内容存档于2015-09-05). 

参见

[编辑]