| 本條目存在以下問題,請協助 改善本條目或在 討論頁針對議題發表看法。
| 此條目需要 精通或熟悉相關主題的編者參與及協助編輯。 (2013年10月25日) 請邀請適合的人士改善本條目。更多的細節與詳情請參見討論頁。 |
|
![](//upload.wikimedia.org/wikipedia/commons/thumb/5/5f/Disambig_gray.svg/25px-Disambig_gray.svg.png)
「
異或」和「
互斥或」均重新導向至此。關於邏輯門,請見「
異或門」。
的文氏圖
在數位邏輯中,邏輯算符異或(英語:Exclusive or)是對兩個運算元的一種邏輯分析類型。與一般的邏輯或不同,當兩兩數值相同時為否,而數值不同時為真。[1]
對於命題
,
異或
通常記作
或
。在程式語言中,常寫作p ^ q
。
邏輯異或相當於邏輯不等價,或者說邏輯異或的邏輯非是邏輯等價。
異或運算
的真值表如下:
![{\displaystyle p}](https://wikimedia.org/api/rest_v1/media/math/render/svg/81eac1e205430d1f40810df36a0edffdc367af36) |
![{\displaystyle q}](https://wikimedia.org/api/rest_v1/media/math/render/svg/06809d64fa7c817ffc7e323f85997f783dbdf71d) |
|
True |
True |
False
|
True |
False |
True
|
False |
True |
True
|
False |
False |
False
|
註:True:真,False:假。
|
無論怎樣改變同一行中
的位置,真值表都是成立的。
在數學和工程學中,常常用其他的邏輯運算子來表示異或算符。異或算符可以使用邏輯算符邏輯與
,邏輯或
和邏輯非
表示為:
![{\displaystyle {\begin{aligned}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{aligned}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/ad61aa71351cefff5092198ef8330db6bbb20152)
另外,異或算符可以被推廣,得到關於n個運算元的異或運算:n個運算元的n維異或的值為真若且唯若其中值為真的運算元有奇數個。
異或也可以被表示為:
![{\displaystyle p\oplus q=\lnot ((p\land q)\lor (\lnot p\land \lnot q))}](https://wikimedia.org/api/rest_v1/media/math/render/svg/3ed8282174ebcbcfdc684c2a81430a28e3330674)
異或還可以看作是邏輯等價關係的非運算。
交換律:
結合律:
恆等律:
歸零律:
對合運算:
儘管算子
(邏輯合取)與
(邏輯析取)是邏輯系統中最為常見的算子,但結構上,系統
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運算可用來交換變數,但比起使用額外變數來交換變數的做法相比,效能反而比較差。
|
---|
- 恆真(
)
| |
- 與非(
)
- 反蘊涵(
)
- 蘊涵(
)
- 或(
)
|
- 非(
)
- 異或(
)
- 雙條件(
)
- 命題
|
- 或非(
)
- 非蘊涵(
)
- 反非蘊涵(
)
- 與(
)
|
- 恆假(
)
|