在上一章中,我們學習了什麼是數字資訊。數字資訊用位元表示,可以取 1 或 0 的值。在本章中,我們將開始探討如何使用數字資訊進行計算和其他操作。
我們即將討論的許多內容都是由 喬治·布林 (1815-1864) 在其 1854 年發表的論文 思想規律探究,邏輯與機率數學理論的基礎 中正式化的。當時它幾乎沒有應用,但最終科學家和工程師意識到他的系統可以用來建立高效的計算機邏輯。涉及數字邏輯的數學分支被恰當地命名為布林代數。
數字邏輯有三個基本運算子,與、或和非。這三個運算子構成了數字邏輯中一切的基礎。事實上,您計算機執行的幾乎所有操作都可以用這三個運算來描述。幸運的是,這些運算並不難理解,因為它們的含義類似於日常語言中這些詞的含義。
與運算子的符號是一個點。使用與的數學表示式如下所示。
與的另一種表示法是
&&
和
只有當兩個輸入值都為 1 時,與表示式的值為 1。否則,值為 0。也就是說,只有當 A **和** B 為 1 時,上述表示式才等於 1。與運算子可以用以下真值表來描述。
 |
|
|
|
| 0 |
0 |
0
|
| 0 |
1 |
0
|
| 1 |
0 |
0
|
| 1 |
1 |
1
|
或運算子的符號是加號。使用或的數學表示式如下所示。
或的另一種表示法是 A
B、A 或 B 以及 A || B。只有當兩個輸入值都為 0 時,或表示式的值為 0。否則,值為 1,也就是說,只有當 A 和 B 為 0 時,上述表示式才等於 1。或運算子的真值表
 |
|
|
|
| 0 |
0 |
0
|
| 0 |
1 |
1
|
| 1 |
0 |
1
|
| 1 |
1 |
1
|
非是一個一元運算子,只需要單個輸入,而與和或是二元運算子,因為它們需要兩個值作為輸入。非運算子的符號。
或 **A'**
非表示式的值為輸入值的相反值。
 |
|
|
| 0 |
|
1
|
| 1 |
|
0
|
如果將與、或和非運算子組合起來,就可以建立或非和與非
- A 與非 B 是
。這就是與門的反轉輸出。
- A 或非 B 是
。這只是或門的反轉輸出。
| 與非 |
或非 |
|
|
| X |
Y |
|
Q |
| 0 |
0 |
1
|
| 0 |
1 |
1
|
| 1 |
0 |
1
|
| 1 |
1 |
0
|
|
| X |
Y |
|
Q |
| 0 |
0 |
1
|
| 0 |
1 |
0
|
| 1 |
0 |
0
|
| 1 |
1 |
0
|
|
另外兩個重要的門是異或門和異或非門,分別用 XOR 和 XNOR 表示。這有時用一個圓圈中的加號表示。
- A XOR B 是
。只有當輸入中只有一個為 1 時,此結果才為真。
- A XNOR B 是
。這是異或門的反轉輸出:只有當兩個輸入相同的時候才為真。
| XOR |
XNOR |
|
|
| X |
Y |
|
Q |
| 0 |
0 |
0
|
| 0 |
1 |
1
|
| 1 |
0 |
1
|
| 1 |
1 |
0
|
|
| X |
Y |
|
Q |
| 0 |
0 |
1
|
| 0 |
1 |
0
|
| 1 |
0 |
0
|
| 1 |
1 |
1
|
|
XOR 代表模 2 加法,這意味著如果你將 1 加到 1,你將回到 0。這是數位電子學中非常有用的函式,但在布林代數中它不是一個重要的概念。
在邏輯領域(它是離散數學的一部分),存在一種與我們所見過的加法/乘法型別不同的符號表示法。
- AND 用
表示。因此A AND B將被寫成
。
- OR 用
表示。因此A OR B將被寫成
。
- NOT 用
表示。因此NOT A是
。
不幸的是,計算機科學、工程學和數學似乎無法達成共識,因此我們必須同時使用兩種符號表示法。其他書籍,尤其是那些更側重於純邏輯或離散數學的書籍,可能使用各種不同的符號表示法,因此如果查閱其他書籍,則需要了解其他符號表示法。由於這是一本工程學書籍,我們不會使用這種符號表示法。
布林代數與普通代數一樣,也遵循一定的規則。這些規則是結合律、分配律、交換律和德摩根定律。結合律、交換律和分配律只適用於 AND 和 OR 運算子。其中一些定律可能看起來很瑣碎,因為你已經習慣了它們。然而,當布林代數被建立時,它擁有不同的規則,我們認為“正常”代數中理所當然的每一個公理都無法保證適用。這些定律已被證明在布林代數下成立。
結合律是代數中的一種性質,表示項的求值順序無關緊要。


分配律是指運算子可以應用於括號內的每個項。


交換律是指運算子應用的順序無關緊要。


德摩根定律是 NOT 或非運算子不是分配律的結果。


德摩根定律(以奧古斯都·德·摩根 (Augustus De Morgan),1806 年至 1871 年命名)告訴我們:一個與非門給出與輸入取反的或門的相同輸出;一個或非門給出與輸入取反的與門的相同輸出。這些輸入取反的門也稱為氣泡門,因為它們在符號上的表示方式,即在每個輸入上新增一個小的“氣泡”,就像在 NOT、NAND 和 NOR 門的輸出上畫圓圈一樣。
德摩根定律在簡化布林表示式時最有用。記住這些定律的一種簡單方法是“改變符號,打斷線”。
透過構建適當的真值表,驗證以下定律:
- 與運算子的結合律,
- 或運算子的分配律,
- 或運算子的交換律,
- 與非運算子的德摩根定律。
重要的是要注意

這可以看作是 AND 具有更高的優先順序,或者與和或之間不滿足結合律,或者是對分配律的無效應用。
從另一個角度來看,這是我們對普通代數的理解的應用,其中將或類比於加法,將與類比於乘法。如果這是用數字而不是布林實體的普通代數,我們永遠不會犯這個錯誤。
所有這些定律都導致了許多適用於所有布林表示式的規則。這些定律有名字,但重要的是你能夠在需要的時候應用它們!請注意,許多規則有兩種形式 - 這稱為對偶性,我們將在後面討論。
|
名稱 |
規則 |
| 1a |
冪等律 |
|
| 1b |
|
| 2a |
恆等律 |
|
| 2b |
|
| 3a |
有界性 |
|
| 3b |
|
| 4a |
補定律 |
|
| 4b |
|
| 5a |
吸收律 |
|
| 5b |
|
| 6 |
對合律或雙重否定律 |
|
| 7a |
一致性定理 |
|
| 7b |
|
對偶原理告訴我們:如果在一個布林等式中,我們互換AND和OR運算子,並將'0'與'1'互換,則結果的布林等式也為真。
- 示例1
- 如果我們知道A·(B+C)=(A·B)+(A·C)(AND運算子的分配律),那麼根據對偶原理,我們可以說A+(B·C)=(A+B)·(A+C)(OR運算子的分配律)。
- 示例2
- 考慮OR運算子的恆等律A+0=A. 應用對偶性,我們得到AND運算子的恆等律A·1=A.
通常情況下,您希望簡化給定的布林函式。例如,您可能希望減少實現該特定函式所需的邏輯閘數量。簡化是透過重複應用布林代數的規則和定律來完成的。請記住,您有時必須反向應用它們才能獲得最小形式。NAND、NOR、XOR和XNOR都需要擴充套件到僅AND、OR和NOT,以便簡化工作。
卡諾圖是一種更正式的方法,可以保證最小的形式,但我們現在將手動進行。
簡化以下表達式。


- 根據規則 4b,

- 根據上一行結果應用規則 5,可得

所以
使用分配律,我們可以將 A 從括號中提出,得到

使用規則 4a,我們可以看到

因此我們可以看到