逻辑异或

在-{zh-hant:數位;zh-hans:数字}-逻辑中，逻辑算符互斥或（）是对两个运算元的一种邏輯分析类型。与一般的邏輯或不同，當兩兩數值相同時為否，而數值不同時為真。

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

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

 真值表 
异或运算的真值表如下：
+      True  True  False True  False  True False  True  True False  False  False 注：True：真，False：假。

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

 其他表示 

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


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

异或也可以被表示为：


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

 性质 
交换律：

结合律：

恒等律：

归零律：

对合运算：

 与抽象代數的關係 

尽管算子（逻辑合取）与（逻辑析取）是逻辑系统中最为常见的算子，但结构上，系统 and 只是幺半群。因此，这两个系统无法合成为一个更大的结构，比如环或半环。

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

 類似符號 
名稱符號Unicode圖形符號的來源地球🜨U+229520px|地球的天文符號 带有赤道和一條經線的球體

 應用 
 使用异或运算交换两个 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運算可用來交換變數，但比起使用額外變數來交換變數的做法相比，效能反而比較差。

 参考来源 

 参见 
 异或门
 异或密码

Category:布尔代数
Category:二元运算
Category:邏輯聯結詞