National Central University
Uedu Main Site
Explore Uedu
Student Console
Register as Member/Login
Research Informed Consent Center
Survey Center
Educational Big Data Challenge
Claim or create a course
Try an AI Scenario Task
Support & Messages
Uptime Data

UeduGPTs

--

Jupyters

3

Local AI

--

Uedu Code

--

中央大學 AQI 80 24°C PM2.5 21
AI Reply Desktop Notifications

Show a desktop notification when the AI TA finishes replying

Chat Message Notifications

Notify me when classmates post messages in the forum

Sound notification

Play an alert sound whenever there is a new notification

Unit 08

布林邏輯與邏輯閘

AND、OR、NOT、XOR 與真值表
Interaction 25 minute(s)

Learning Objectives

  • 說明布林值只有「真/假」兩種,並對應到電路的 1 與 0
  • 寫出 AND、OR、NOT、XOR、NAND、NOR 的真值表
  • 把一句判斷規則寫成布林運算式,列出它的真值表
  • 用笛摩根定律改寫運算式,說明 NAND 為什麼稱為萬用閘

電腦怎麼做「判斷」

手機解鎖的規則是「指紋對了,或密碼對了」;宿舍門禁是「有學生證,而且在開放時間內」。 這些規則的每個條件只有兩種答案:是,或否。

前幾課看過,電腦裡的資料全部是 0 和 1。這一課要回答:只有 0 和 1,電腦怎麼做出判斷? 答案是一套只處理「是/否」的代數,加上把這套代數做成電路的元件:邏輯閘(logic gate)。

生活裡的說法 布林值 電路裡
是、真(true) 1 高電壓(有電)
否、假(false) 0 低電壓(沒電)

布林代數與三個基本運算

英國數學家布爾(George Boole)在 1847 年的《邏輯的數學分析》與 1854 年的《思維規律》中, 把邏輯推理寫成代數:變數只有真與假兩種值,用運算把它們組合起來。這套方法後來稱為布林代數(Boolean algebra)。

將近一百年後,夏農(Claude Shannon)在 1937 年的 MIT 碩士論文(1938 年發表)中指出: 用繼電器、開關組成的電路,可以用布林代數來分析與設計。從此,「設計電路」可以先在紙上用代數算,數位電路的設計就建立在這個基礎上。

布林代數有三個基本運算:

運算 意思 生活例子 什麼時候是 1
AND(且) 兩個條件都要成立 有學生證 且 在開放時間 兩個輸入都是 1
OR(或) 至少一個成立 指紋對 或 密碼對 至少一個輸入是 1
NOT(非) 相反 不是假日 輸入是 0

把所有可能的輸入列出來,寫出每一種輸入的結果,這張表叫真值表(truth table)。 兩個輸入各有 0、1 兩種值,所以有 2 × 2 = 4 列;三個輸入就有 2³ = 8 列。

互動練習:六種基本邏輯閘

上方選一種邏輯閘,點左邊的開關 A、B 切換 0 和 1,看燈泡 Y 亮不亮;線的顏色表示這條線是 1(有電)還是 0。右邊的真值表會隨你試過的輸入逐列填上。照下面的任務:先填滿 AND 和 OR 的真值表,再找出 OR 和 XOR 唯一不同的那一列,最後看 NOT 與 NAND。

XOR、NAND、NOR 與電路符號

除了三個基本運算,電路裡還常用三種由它們組合出來的閘:

閘 運算式 什麼時候輸出 1 常見用途
XOR(互斥或) A ⊕ B 兩個輸入不一樣 樓梯兩端的開關控制同一盞燈、加法的個位數(下一課)
NAND (A · B)′ AND 的相反:除了兩個都是 1,其他都輸出 1 最常用來製造晶片的基本單元
NOR (A + B)′ OR 的相反:兩個都是 0 才輸出 1 「全部都沒有發生」的偵測

書寫時,AND 常寫成乘號 A · B、OR 寫成加號 A + B、NOT 在變數右上加一撇 A′(或在上方畫一條橫線)。 電路圖的符號:AND 是半圓形(D 字形),OR 是尖頭的弧形,NOT 是三角形,輸出端的小圓圈表示「再反相一次」, 所以 NAND=AND 加小圓圈、NOR=OR 加小圓圈。

真正的邏輯閘是用電晶體做的:電晶體像一個用電壓控制的開關,幾個電晶體串聯或並聯,就能做出一個閘。 一顆處理器裡有非常大量的電晶體,組成數不清的邏輯閘。

把一條規則寫成運算式,列出真值表

門禁規則「有學生證,而且(在開放時間或是管理員)」寫成 card & (hours | admin)。程式用三層迴圈把三個條件的 8 種組合都試一次。在 Python 裡 & 對 0 和 1 做 AND、| 做 OR。看上方三個變數怎麼一列一列變化,再對照輸出:哪幾列會開門?

想一想:真值表與運算式

1.

下面這段程式會印出什麼?(& 是 AND,| 是 OR,1 - C 是 NOT C)

A, B, C = 1, 0, 1
print((A & B) | (1 - C))
2.

樓梯有上下兩個開關控制同一盞燈:不管燈現在亮不亮,撥任何一個開關,燈都會改變狀態。這盞燈的電路是哪一種閘?

3.

一個電路有 4 個輸入,它的完整真值表有幾列?

第 1 次作答

布林代數的規則與笛摩根定律

布林代數有一些和一般代數很像的規則,可以用來化簡運算式(也就是讓電路用更少的閘):

規則 AND 的寫法 OR 的寫法
交換律 A · B = B · A A + B = B + A
和 0、1 運算 A · 1 = A,A · 0 = 0 A + 0 = A,A + 1 = 1
和自己運算 A · A = A A + A = A
和自己的相反運算 A · A′ = 0 A + A′ = 1
分配律 A · (B + C) = A · B + A · C A + B · C = (A + B) · (A + C)

最常用的是笛摩根定律(De Morgan's laws),以英國數學家笛摩根(Augustus De Morgan)命名:

NOT (A AND B) = (NOT A) OR  (NOT B)
NOT (A OR  B) = (NOT A) AND (NOT B)

用生活的話說:「不是兩個都有」等於「至少缺一個」;「兩個都沒有」等於「沒有 A 而且沒有 B」。 下面的程式把四種輸入都代進去,確認兩邊永遠相等。

用程式驗證笛摩根定律

在只有 0 和 1 的情況下,NOT x 可以寫成 1 - x。程式對 A、B 的四種組合分別算出等號左邊與右邊,再用 == 比較。看 left 和 right 是不是每一列都一樣。

NAND 是萬用閘

只用 NAND 一種閘,就能做出 NOT、AND、OR,因此能做出任何邏輯電路。這種性質叫功能完備(functionally complete), NAND 因此稱為萬用閘(universal gate);NOR 也有同樣的性質。

想做的閘 只用 NAND 的做法
NOT A 把 A 同時接到 NAND 的兩個輸入:(A · A)′ = A′
A AND B NAND 之後再接一個「當成 NOT 用的 NAND」
A OR B 先把 A、B 各自反相,再接 NAND:(A′ · B′)′ = A + B(笛摩根定律)

這個性質在 1913 年由謝弗(Henry M. Sheffer)發表;美國哲學家皮爾士(Charles S. Peirce)在 1880 年左右的手稿中已經注意到,但當時沒有發表。 對晶片製造來說,整顆晶片大量重複同一種單元比較容易製造與最佳化,這是 NAND 常用的原因之一。

下面的練習是「填空題」:電路的其他部分已經接好,你要選一個閘放進「?」,讓整個電路符合目標真值表。

互動練習:選一個閘,讓電路符合真值表

每一題右邊有「目標 Y」與「你的電路」兩欄,程式會把四種輸入都代進去算,符合的列打 ✓。上方選一個閘放進「?」,也可以點開關 A、B 看每條線的 0/1。四列都打 ✓ 就答對,按「下一題」繼續。第 3、4 題的電路多接了 NOT,想想笛摩根定律。

想一想:化簡與萬用閘

1.

依笛摩根定律,NOT (A OR B) 等於下列哪一個?

2.

把同一個訊號 A 同時接到 NAND 閘的兩個輸入,輸出是什麼?

3.

運算式 A + A′ · B(A OR ((NOT A) AND B))化簡後等於哪一個?可以用真值表檢查。

第 1 次作答

重點整理

  • 布林值只有真(1)與假(0),在電路裡對應高電壓與低電壓;布林代數由布爾提出,夏農把它用在開關電路的設計上。
  • 三個基本運算:AND(兩個都是 1)、OR(至少一個是 1)、NOT(相反)。由它們組合出 XOR(不一樣才是 1)、NAND、NOR。
  • 真值表列出所有輸入組合的結果,n 個輸入有 2ⁿ 列。任何「是/否」的判斷規則都能寫成運算式,再列出真值表。
  • 笛摩根定律:NOT (A AND B)=(NOT A) OR (NOT B),NOT (A OR B)=(NOT A) AND (NOT B)。
  • 只用 NAND(或只用 NOR)就能做出所有邏輯電路,因此稱為萬用閘。

下一課:把邏輯閘組合起來,做出一個會算加法的電路。想在程式裡練習 and、or、not,可以接著上 Python 軌的條件判斷。

這一課完成了!
Next lesson:加法器與組合電路
你目前沒有登入,學習進度只存在這個瀏覽器。 Login 後,進度會跟著帳號,換電腦也看得到。