]]
在-{zh-hant:數位;zh-hans:数字}-逻辑中,逻辑算符互斥或()是对两个运算元的一种邏輯分析类型。与一般的邏輯或不同,當兩兩數值相同時為否,而數值不同時為真。
对于命题 p, q,p异或q通常记作p \operatorname{XOR} q或p \oplus q。在编程语言中,常写作p ^ q。
逻辑异或相当于逻辑不等价,或者说逻辑异或的逻辑非是逻辑等价。
真值表
异或运算p \oplus q的真值表如下:
无论怎样改变同一行中p, q, p \oplus q的位置,真值表都是成立的。
其他表示
在数学和工程学中,常常用其他的逻辑运算符来表示异或算符。异或算符可以使用逻辑算符逻辑与\land,逻辑或\lor和逻辑非\lnot表示为:
:
\begin{align}
p \oplus q & = (p \land \lnot q) \lor (\lnot p \land q) = p\overline{q} + \overline{p}q \\
& = (p \lor q) \land (\lnot p \lor \lnot q) = (p+q)(\overline{p}+\overline{q}) \\
& = (p \lor q) \land \lnot (p \land q) = (p+q)(\overline{pq})
\end{align}
另外,异或算符可以被推广,得到关于n个运算元的异或运算:n个运算元的n维异或的值为真当且仅当其中值为真的运算元有奇数个。
异或也可以被表示为:
: p \oplus q = \lnot ((p \land q) \lor (\lnot p \land \lnot q))
异或还可以看作是逻辑等价关系的非运算。
性质
交换律:p \oplus q = q \oplus p
结合律:p \oplus (q \oplus r) = (p \oplus q) \oplus r
恒等律:p \oplus 0 = p
归零律:p \oplus p = 0
对合运算:p \oplus q \oplus q = p\oplus 0 = p
与抽象代數的關係
尽管算子\wedge(逻辑合取)与\lor(逻辑析取)是逻辑系统中最为常见的算子,但结构上,系统(\{T, F\}, \wedge) and (\{T, F\}, \lor)只是幺半群。因此,这两个系统无法合成为一个更大的结构,比如环或半环。
但是,带有逻辑异或的系统(\{T, F\}, \oplus)是一个交换群。因此,算子\wedge与\oplus的结合在集合\{T, F\}上作用就产生了最基本的二元域F_2。这个域可以得出所有运用(\land, \lor)可以得到的结果,并且由于附带了域的结构,可以进行代数上的进一步分析。
類似符號
應用
使用异或运算交换两个 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( num_a: &'a mut i32, num_b: &'b mut i32 ) {
num_a ^= num_b;
num_b ^= num_a;
num_a ^= num_b;
}
雖然XOR運算可用來交換變數,但比起使用額外變數來交換變數的做法相比,效能反而比較差。
参考来源
参见
- 异或门
- 异或密码
评论 (0)