在数字逻辑中,逻辑算符互斥或(英語:Exclusive or)是对两个运算元的一种邏輯分析类型。与一般的邏輯或不同,當兩兩數值相同時為否,而數值不同時為真。
对于命题 ,异或通常记作或。在编程语言中,常写作p ^ q。
逻辑异或相当于逻辑不等价,或者说逻辑异或的逻辑非是逻辑等价。
真值表
异或运算的真值表如下:
| | |
|---|
| True | True | False |
| True | False | True |
| False | True | True |
| False | False | False |
| 注:True:真,False:假。 |
无论怎样改变同一行中的位置,真值表都是成立的。
其他表示
在数学和工程学中,常常用其他的逻辑运算符来表示异或算符。异或算符可以使用逻辑算符逻辑与,逻辑或和逻辑非表示为:
另外,异或算符可以被推广,得到关于n个运算元的异或运算:n个运算元的n维异或的值为真当且仅当其中值为真的运算元有奇数个。
异或也可以被表示为:
异或还可以看作是逻辑等价关系的非运算。
性质
交换律:
结合律:
恒等律:
归零律:
对合运算:
与抽象代數的關係
尽管算子(逻辑合取)与(逻辑析取)是逻辑系统中最为常见的算子,但结构上,系统 and 只是幺半群。因此,这两个系统无法合成为一个更大的结构,比如环或半环。
但是,带有逻辑异或的系统是一个交换群。因此,算子与的结合在集合上作用就产生了最基本的二元域。这个域可以得出所有运用可以得到的结果,并且由于附带了域的结构,可以进行代数上的进一步分析。
類似符號
| 名稱 | 符號 | 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運算可用來交換變數,但比起使用額外變數來交換變數的做法相比,效能反而比較差。
参考来源
- Germundsson, Roger; Weisstein, Eric. XOR. MathWorld. Wolfram Research. [17 June 2015]. (原始内容存档于2015-09-05).
参见
维基百科, wiki, wikipedia, 百科全书, 书籍, 图书馆, 文章, 阅读, 免费下载, 关于 逻辑异或 的信息, 什么是 逻辑异或?逻辑异或 是什么意思?