簡介:歡迎來到布爾邏輯(Boolean Logic)的世界!

你有沒有想過電腦是如何做決定的呢?在電腦內部,每秒鐘都有數以百萬計的微型開關在開啓和關閉。電腦其實不懂得人類複雜的日常語言,牠們依靠的是一套既簡單又巧妙的系統——布爾邏輯(Boolean logic)

在本章中,你將會發現以真(True)假(False)為基礎的簡單規則,如何讓電腦電路計算出答案,並讓電腦程式作出聰明的抉擇。剛開始接觸時如果覺得有點陌生,千萬不用擔心——只要掌握了三個核心構建單元(ANDORNOT),一切都會變得非常清晰明了!


1. 甚麼是布爾邏輯?

布爾邏輯(Boolean logic)是一種代數形式,所處理的數值永遠只有兩種可能:真(True)假(False)

你知道嗎? 布爾邏輯是由 19 世紀的數學家佐治·布爾(George Boole)發明的。早在現代電子電腦出現之前,布爾就已經研究出如何運用純數學來進行邏輯判斷。今天,他的理論已成為所有數碼科技的基石!

二進制表示法(Binary Representation)

在電腦硬件內部,電流只有「流通」或「不流通」兩種狀態。我們使用二進制數字來代表這些狀態:

1 代表 True(真)(也可以理解為高電位 High開啟 On)。
0 代表 False(假)(也可以理解為低電位 Low關閉 Off)。

重點提示: 布爾邏輯完全建基於兩個數值:\(1\)(真)和 \(0\)(假)。


2. 邏輯門與邏輯電路(Logic Gates and Circuits)

在實體的電腦晶片中,決策是由稱為邏輯門(logic gates)的微型電子元件處理的。邏輯門會接收一個或兩個二進制輸入(\(0\) 或 \(1\)),進行處理後,輸出一個二進制結果。

為了記錄邏輯門的功能,我們會使用真值表(truth table)。真值表會在左側列出所有可能的輸入組合(通常標記為 \(A\) 和 \(B\)),並在右側顯示相應的輸出結果(通常標記為 \(Q\) 或 \(Z\))。


非門(The NOT Gate / 逆變器 Inverter)

非門(NOT gate)是最簡單的邏輯門。它的運作就像一個「相反開關」——單純將訊號反轉(倒轉)。

運作原理: 如果輸入是 \(1\),輸出就是 \(0\);如果輸入是 \(0\),輸出就是 \(1\)。
圖形外觀: 繪製為一個三角形,頂端帶有一個小圓圈(氣泡 bubble)
特別規則: 非門只有一個輸入一個輸出

非門(NOT Gate)真值表:
輸入 \(A\) : \(0\) \(\rightarrow\) 輸出 \(Q\) : \(1\)
輸入 \(A\) : \(1\) \(\rightarrow\) 輸出 \(Q\) : \(0\)

生活化比喻: 想像一下雪櫃的門燈感應器。當雪櫃門沒有(NOT)打開(即關上,\(0\))時,雪櫃燈保持熄滅(\(0\))。當雪櫃門打開時,按鈕被釋放(\(0\)),令雪櫃燈亮起(\(1\))。


與門(The AND Gate)

與門(AND gate)的要求非常嚴格。它需要所有輸入都為「真」,才會產生「真」的輸出。

運作原理: 只有當輸入 \(A\) 輸入 \(B\) 同時為 \(1\) 時,輸出才會是 \(1\)。只要有任何一個輸入是 \(0\),輸出就是 \(0\)。
圖形外觀: 外形就像英文字母 D
記憶小貼士: AND 的結尾是字母 D,而這個邏輯門的外形正正就是 D 字形!

與門(AND Gate)真值表:
輸入 \(A\) : \(0\),輸入 \(B\) : \(0\) \(\rightarrow\) 輸出 \(Q\) : \(0\)
輸入 \(A\) : \(0\),輸入 \(B\) : \(1\) \(\rightarrow\) 輸出 \(Q\) : \(0\)
輸入 \(A\) : \(1\),輸入 \(B\) : \(0\) \(\rightarrow\) 輸出 \(Q\) : \(0\)
輸入 \(A\) : \(1\),輸入 \(B\) : \(1\) \(\rightarrow\) 輸出 \(Q\) : \(1\)

生活化比喻: 想像一下火箭發射系統。只有在機長轉動鑰匙(\(1\))並且副機長也轉動鑰匙(\(1\))時,火箭才會發射(\(1\))。


或門(The OR Gate)

或門(OR gate)比較靈活。只要至少有一個輸入為「真」,它就會產生「真」的輸出。

運作原理: 當輸入 \(A\) 是 \(1\)、輸入 \(B\) 是 \(1\)、兩者同時為 \(1\) 時,輸出都會是 \(1\)。只有當兩個輸入都是 \(0\) 時,輸出才會是 \(0\)。
圖形外觀: 繪製為後端微彎、前端呈尖角的形狀(就像盾牌或彎曲的箭頭)。

或門(OR Gate)真值表:
輸入 \(A\) : \(0\),輸入 \(B\) : \(0\) \(\rightarrow\) 輸出 \(Q\) : \(0\)
輸入 \(A\) : \(0\),輸入 \(B\) : \(1\) \(\rightarrow\) 輸出 \(Q\) : \(1\)
輸入 \(A\) : \(1\),輸入 \(B\) : \(0\) \(\rightarrow\) 輸出 \(Q\) : \(1\)
輸入 \(A\) : \(1\),輸入 \(B\) : \(1\) \(\rightarrow\) 輸出 \(Q\) : \(1\)

生活化比喻: 想像一下防盜警報器。只要大門感應器被觸發(\(1\)),或者後窗感應器被觸發(\(1\)),又或者兩者同時被觸發,警報器都會響起(\(1\))。


真值表總結(雙輸入邏輯門)

以下是輸入 \(A\) 和 \(B\) 在所有可能組合下的輸出對比:

• 輸入(\(A = 0, B = 0\))\(\rightarrow\) AND 輸出 = \(0\) | OR 輸出 = \(0\)
• 輸入(\(A = 0, B = 1\))\(\rightarrow\) AND 輸出 = \(0\) | OR 輸出 = \(1\)
• 輸入(\(A = 1, B = 0\))\(\rightarrow\) AND 輸出 = \(0\) | OR 輸出 = \(1\)
• 輸入(\(A = 1, B = 1\))\(\rightarrow\) AND 輸出 = \(1\) | OR 輸出 = \(1\)

重點提示: NOT 會反轉單一輸入;AND 要求兩個輸入都必須是 \(1\);OR 只需至少一個輸入是 \(1\)。


3. 編程中的布爾邏輯

在如 Python 等文字編程語言中,布爾邏輯廣泛應用於選擇結構(selection statements)(例如 IF 條件語句),用來控制程式執行哪一部分的程式碼。

比較運算符(Comparison Operators)

在組合條件之前,程式會使用比較運算符來比對數據,從而產生「真(True)」或「假(False)」的結果:

== :等於
!= :不等於
< :小於
> :大於


程式碼中的邏輯運算符(Logical Operators)

Python 使用小寫關鍵字 andornot 來組合多個比較條件。

範例 1:使用 and
程式碼:
if age > 12 and age < 20:
print("You are a teenager!")
運作原理: 只有在兩個條件同時為真時(例如 age 是 \(15\)),系統才會印出訊息。如果 age 是 \(10\) 或 \(25\),整個條件就會判定為假。

範例 2:使用 or
程式碼:
if day == "Saturday" or day == "Sunday":
print("It is the weekend!")
運作原理: 只要其中一個條件為真,系統就會印出訊息。

範例 3:使用 not
程式碼:
if not game_over:
print("Keep playing!")
運作原理: 如果 game_over 是 False(\(0\)),not game_over 就會將它變成 True(\(1\)),從而執行 IF 區塊內的程式碼。

重點提示: 在編程中,邏輯運算符(andornot)讓演算法能夠在作出決策前測試多個條件。


4. 常見陷阱與誤解(小心注意!)

1. 「相容或(Inclusive OR)」陷阱
在日常對話中,當有人問:「你想喝茶還是咖啡?」時,通常代表你只能二選一。但在布爾邏輯中,OR 是包含兩者的(相容的)。如果兩個輸入都是 True(\(1\)),輸出依然是 True(\(1\))。

2. 符號外形混淆
繪製電路圖時,很容易把 AND 門和 OR 門的符號弄混。請牢記:AND 門後方是平直的,前方是圓弧形,外形就像大寫字母 D

3. NOT 門有兩個輸入端?
考試中常見的錯誤是試圖為 NOT 門畫上兩個輸入端。記住,NOT 門純粹是個逆變器,永遠只能有一個輸入端

4. Python 語法簡寫錯誤
在日常英語中,我們可能會說:「If x equals 3 or 4(如果 x 等於 3 或 4)」
但在 Python 中,寫成 if x == 3 or 4: 是嚴重的錯誤!電腦會將它解讀為兩個獨立的檢查:(if x == 3) 或者是 (4)。因為 \(4\) 是一個非零數值,電腦永遠會將它視為 True,這意味著這個 IF 語句每次都會被執行!
正確寫法: 你必須在兩邊完整寫出變量名稱:if x == 3 or x == 4:


5. 溫習清單

在學習下一單元前,請確保你能夠:

• 解釋布爾值只有 True(\(1\))False(\(0\)) 兩種。
• 說出發明布爾邏輯的數學家是佐治·布爾(George Boole)。
• 繪製並認出 NOT(帶氣泡的三角形)、AND(D 字形)和 OR(盾牌形)的專用符號。
• 使用標準的 \(A, B\) 輸入及 \(Q\) 輸出,填寫 NOTANDOR 門的真值表。
• 解釋 andornot 在 Python 選擇結構(IF 語句)中的運作方式。