Home
Explore Uedu
Student Console
Register as Member/Login
(2) In future presentations of the research findings, in addition to the course project website and public presentations, your real name and personal information will not appear in this research report. If you are interested in the research results, we can provide you with an executive summary after the study is completed.
問卷中心
Teacher Console
Course Setup
Support & Messages
Uptime Data

UeduGPTs

--

Jupyters

0

Local AI

--

CISOSE26 本地 AI UG26
政治大學 AQI 18 29°C

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

布林邏輯與邏輯閘

布林邏輯與邏輯閘:從一盞樓梯燈到整台電腦

AND、OR、NOT、XOR、真值表與邏輯閘如何長出算術,以及為何 NAND 一種閘就能建構整個數位世界

電燈開關藏著一整座電腦城市

想像你站在一個房間裡,牆上有兩個開關控制同一盞燈:樓梯上下兩端各一個。你在樓下打開燈,上樓後再用另一個開關把它關掉。這種「樓梯燈」的設計,其實就是一個活生生的邏輯運算:燈亮或不亮,取決於兩個開關狀態的某種「組合規則」。

把「開關打開」記作 1、「關閉」記作 0,把「燈亮」記作 1、「燈滅」記作 0,這盞樓梯燈的行為就能寫成一張對照表。而這正是數位電腦最底層的祕密:再龐大的程式、再華麗的遊戲畫面、再聰明的 AI 模型,最終都被翻譯成數以億計的 0 與 1,再交給一群只懂得「真」與「假」的微小電路去處理。這些電路的運算規則,就是布林邏輯(Boolean logic);實現這些規則的硬體元件,就是邏輯閘(logic gate)。

這篇文章,我們從一盞燈出發,一路走到能做加法的電路,最後看看為什麼一種叫 NAND 的閘,足以建構出整台電腦。

布林代數:只有兩個值的世界

布林邏輯得名於十九世紀數學家喬治・布爾(George Boole)。它的核心極為簡單:每個變數只能取兩個值,習慣上寫成 0 與 1,或對應到「假(false)」與「真(true)」。在這個世界裡,運算不是加減乘除,而是邏輯運算。

計算的基礎概念示意圖

最基本的三個運算是 AND、OR、NOT,加上常用的 XOR,構成我們日常推理的形式化版本。它們各自對應一個很直覺的中文意義:

  • AND(且):兩者都為真,結果才為真。像「要帶傘 而且 要穿外套,我才出門」。
  • OR(或):只要其中一個為真,結果就為真。像「下雨 颳風,我就待在家」。
  • NOT(非):把真假反過來。「不是晴天」。
  • XOR(互斥或):兩者不同時為真,相同時為假。前面樓梯燈的例子正是 XOR:只有一個開關被切換,燈才會改變狀態。

我們常用符號表示這些運算:AND 寫成 $A \cdot B$ 或 $A \land B$,OR 寫成 $A + B$ 或 $A \lor B$,NOT 寫成 $\overline{A}$ 或 $\lnot A$,XOR 寫成 $A \oplus B$。

要注意,這裡的 $+$ 不是算術加法。在布林代數裡 $1 + 1 = 1$(OR 的結果),而不是 2。這是初學者最常踩的坑:布林的符號借用了算術外型,意義卻完全不同。

真值表:把規則攤開來看

要精確定義一個邏輯運算,最可靠的方法是把所有可能的輸入組合與對應輸出全部列出來,這張表叫真值表(truth table)。對兩個輸入而言,總共有 $2^2 = 4$ 種組合:

A B A AND B A OR B A XOR B
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0

NOT 只有一個輸入,所以它的真值表只有兩列:

A NOT A
0 1
1 0

真值表的價值在於它毫無歧義。當你不確定某個複雜邏輯式到底在算什麼,把所有輸入列出來逐一計算,答案一目了然。對於 $n$ 個輸入,真值表會有 $2^n$ 列,這也預示了一個重要事實:輸入越多,可能性呈指數成長。

邏輯閘:讓電路執行邏輯

布林運算是抽象規則,邏輯閘則是把規則做成硬體的實體電路。每個邏輯閘接收一或多個電壓訊號(高電壓代表 1、低電壓代表 0),輸出一個訊號。工程界用標準符號繪製這些閘:

AND 閘      OR 閘       NOT 閘(反相器)
 A ─┐        A ─┐         A ─▷○─ Y
    ╲D─ Y       ╲)─ Y     (三角形後接小圓圈)
 B ─┘        B ─┘

實務上有六個常見的閘。除了 AND、OR、NOT、XOR,還有兩個「加了否定」的版本:

  • NAND(NOT-AND):先 AND 再 NOT,即 $\overline{A \cdot B}$。
  • NOR(NOT-OR):先 OR 再 NOT,即 $\overline{A + B}$。

它們的符號就是在對應閘的輸出端多畫一個小圓圈(代表反相)。NAND 與 NOR 看似只是配角,後面我們會看到它們其實是整個數位世界的基石。

De Morgan 定律:否定的分配規則

當邏輯式裡同時出現否定與 AND/OR,常需要化簡或改寫。最重要的工具是 De Morgan 定律:

$$\overline{A \cdot B} = \overline{A} + \overline{B}$$

$$\overline{A + B} = \overline{A} \cdot \overline{B}$$

用白話說:「不是(A 且 B)」等於「不是 A 或不是 B」;「不是(A 或 B)」等於「不是 A 且不是 B」。否定一個括號時,要把裡面的 AND 換成 OR、OR 換成 AND,並把每一項各自否定。

舉個生活例子:「不是(你帶了傘 而且 帶了外套)」,意思就是「你沒帶 沒帶外套」——只要少了任一樣就成立。

我們可以用真值表驗證第一條定律:

A B A·B $\overline{A \cdot B}$ $\overline{A}$ $\overline{B}$ $\overline{A}+\overline{B}$
0 0 0 1 1 1 1
0 1 0 1 1 0 1
1 0 0 1 0 1 1
1 1 1 0 0 0 0

第四欄與第七欄完全相同,定律成立。De Morgan 定律不只是數學趣味,它在硬體設計中極為關鍵:它讓我們能把任何用 AND/OR/NOT 寫成的電路,改寫成只用 NAND 或只用 NOR 的形式。

從邏輯到算術:半加器與全加器

布林邏輯最動人的地方,是它能直接做出算術。電腦怎麼用「真假」做加法?我們從二進位最基本的單位加法看起。

兩個一位元(bit)相加,有四種情況:

0 + 0 = 0   (和 0,進位 0)
0 + 1 = 1   (和 1,進位 0)
1 + 0 = 1   (和 1,進位 0)
1 + 1 = 10  (和 0,進位 1)

注意最後一行:$1+1$ 在二進位是 $10$,也就是「和(sum)為 0、進位(carry)為 1」。我們需要兩個輸出:和、進位。觀察規律:

  • 的真值表,恰好就是 A XOR B
  • 進位 的真值表,恰好就是 A AND B

把這兩個閘組合起來,就得到半加器(half adder)

A ──┬──────[XOR]──── Sum(和)
    │   ┌──┘
B ──┼───┤
    │   └──[AND]──── Carry(進位)
    └───────┘

半加器只能加兩個位元,但真正的加法需要處理「來自前一位的進位」。例如十進位 $19 + 5$,個位 $9+5$ 要進位到十位。能同時接收「進位輸入」的電路叫全加器(full adder):它有三個輸入(A、B、進位輸入 $C_{in}$),兩個輸出(和 Sum、進位輸出 $C_{out}$)。全加器可以用兩個半加器加一個 OR 閘構成。

把 $n$ 個全加器串接起來——前一個的進位輸出接到下一個的進位輸入——就成了能處理 $n$ 位元加法的「漣波進位加法器(ripple-carry adder)」。這就是電腦做整數加法的硬體雛形。從幾個只懂真假的小閘,竟長出了算術,這正是計算之美。

動手看一個例子

讓我們親手化簡一個邏輯式,並驗證它。考慮這個式子:

$$Y = \overline{\overline{A} \cdot \overline{B}}$$

它看起來有點嚇人(雙重否定加 AND),但用 De Morgan 定律,把外層否定分配進去:

$$Y = \overline{\overline{A}} + \overline{\overline{B}} = A + B$$

雙重否定互相抵消,最後竟然就是單純的 $A + B$(OR)!也就是說,「對兩個輸入各取反、AND、再取反」等於「OR」。我們用真值表驗證:

A B $\overline{A}$ $\overline{B}$ $\overline{A}\cdot\overline{B}$ $Y=\overline{\overline{A}\cdot\overline{B}}$ A+B
0 0 1 1 1 0 0
0 1 1 0 0 1 1
1 0 0 1 0 1 1
1 1 0 0 0 1 1

最後兩欄完全一致,化簡正確。我們也可以用程式把任意邏輯式的真值表列印出來,驗證自己的推導:

def half_adder(a, b):
    """半加器:回傳 (和, 進位)"""
    s = a ^ b      # XOR -> 和
    c = a & b      # AND -> 進位
    return s, c

# 列印半加器真值表
print(" A  B | Sum Carry")
for a in (0, 1):
    for b in (0, 1):
        s, c = half_adder(a, b)
        print(f" {a}  {b} |  {s}    {c}")

執行結果:

 A  B | Sum Carry
 0  0 |  0    0
 0  1 |  1    0
 1  0 |  1    0
 1  1 |  0    1

Python 內建的位元運算子 ^(XOR)、&(AND)、|(OR)、~(NOT)讓我們能直接在程式裡玩布林邏輯。注意 ~ 在 Python 是對整數做按位反相,會牽涉負數補數表示,初學時用單一位元建議改寫成 1 - a 來表達 NOT 較不易混淆。

重點回顧

  • 布林邏輯的變數只有 0 與 1 兩個值,基本運算是 AND(且)、OR(或)、NOT(非)、XOR(互斥或);要小心 $1+1=1$,布林的 $+$ 不是算術加法。
  • 真值表把所有 $2^n$ 種輸入組合與輸出攤開列出,是定義與驗證邏輯式最可靠的方法。
  • 邏輯閘是把布林運算實作成電路的硬體;常見六種為 AND、OR、NOT、NAND、NOR、XOR,輸出端的小圓圈代表反相。
  • De Morgan 定律 $\overline{A\cdot B}=\overline{A}+\overline{B}$ 與 $\overline{A+B}=\overline{A}\cdot\overline{B}$,是化簡與改寫邏輯式的核心工具。
  • 半加器(XOR 算和、AND 算進位)與全加器(多了進位輸入)展示了邏輯如何長出算術,串接後即成多位元加法器。

深入探討(研究所視角)

前面我們用了 AND、OR、NOT 等多種閘,但一個深刻的問題是:最少需要幾種閘,就能建構出任意邏輯電路? 答案出人意料——只要一種就夠了,那就是 NAND(NOR 也行)。NAND 被稱為通用閘(universal gate),因為任何布林函數都能僅用 NAND 閘實現。

要證明這點,只需展示 NAND 能合成出 AND、OR、NOT 這組「函數完備(functionally complete)」的基底。回憶 NAND 的定義 $\text{NAND}(A,B)=\overline{A\cdot B}$:

  • NOT:兩個輸入接同一訊號。$\text{NAND}(A,A)=\overline{A\cdot A}=\overline{A}$。
  • AND:先 NAND 再 NOT。$\overline{\text{NAND}(A,B)}=\overline{\overline{A\cdot B}}=A\cdot B$;而 NOT 又能用 NAND 做,所以 AND 需兩個 NAND。
  • OR:對兩輸入先各自取 NOT(各一個 NAND),再 NAND。由 De Morgan,$\text{NAND}(\overline{A},\overline{B})=\overline{\overline{A}\cdot\overline{B}}=A+B$,共三個 NAND。

既然 AND、OR、NOT 都能用 NAND 合成,而這三者已知函數完備,NAND 自然也函數完備。這在工程上意義重大:晶圓廠只要把製程針對單一種 NAND 閘高度優化,就能拼出整顆 CPU,降低設計與製造複雜度。CMOS 製程裡 NAND 的電晶體實作也比 AND(NAND 再串一級反相器)更省、更快。

第二個研究所關注的核心是邏輯化簡(logic minimization)。同一個布林函數可以有無數種等價寫法,但化簡後的式子能用更少的閘、更低的延遲、更省的功耗實現。化簡的代數工具就是布林代數的公理:交換律、結合律、分配律、吸收律 $A+A\cdot B=A$、互補律 $A+\overline{A}=1$ 等,配合 De Morgan 定律反覆改寫。

但手動代數化簡容易出錯且難以保證最優。經典的系統化方法是卡諾圖(Karnaugh map, K-map):把真值表按格雷碼(Gray code)排列成二維方格,相鄰格只差一個變數,藉由「圈出相鄰的 1」消去變數,得到最簡的積項之和(sum of products)。卡諾圖在變數少(約 4~6 個)時直觀好用;變數一多便不可行,此時改用 Quine–McCluskey 演算法做表格式化簡。

值得指出的是,邏輯化簡的一般問題在計算複雜度上是困難的:求最小的邏輯式等價於電路最小化問題,屬於 $\Sigma_2^p$(多項式階層第二層)的難題,沒有已知的多項式時間最優演算法。因此實務 EDA(電子設計自動化)工具大多採用啟發式(heuristic),如 Espresso 邏輯最小化器,在可接受時間內求得「夠好」而非「絕對最優」的解。

往更廣處連結:布林函數構成了命題邏輯(propositional logic)的語意基礎,判定一個布林式是否存在使其為真的賦值,就是著名的布林可滿足性問題(SAT)——史上第一個被證明為 NP-complete 的問題(Cook–Levin 定理)。從這個角度看,我們手上這些 AND、OR、NOT 小閘,一端連著實體的矽晶電路,另一端連著計算理論最深的難題之一。從一盞樓梯燈到 P 對 NP,布林邏輯始終是那條貫穿其間的主線。

AI 共讀助教正在陪你讀:布林邏輯與邏輯閘:從一盞樓梯燈到整台電腦
嗨!我是這篇文章的共讀助教,只根據〈布林邏輯與邏輯閘:從一盞樓梯燈到整台電腦〉的內容回答。可以問我「解釋某段」「舉個例子」「出題考我」,或反白文中段落後點下方「解釋選取段落」。