布尔代数基础 -- AND / OR / NOT / XOR
布尔代数是所有数字电路的数学基础,四种基本逻辑运算的组合可以构建任意复杂电路。
生活类比:自动门与门禁系统
在进入一栋高度安全的建筑时,你会遇到各种门禁规则。这些规则恰好对应了布尔代数的基本运算,让我们用生活场景来理解它们。
AND 与门——两道门同时打开才能进入:某金库需要两把钥匙同时转动才能开门。两把钥匙都插入并旋转(输入都为 1),门才会打开(输出为 1)。任意一把钥匙缺失,门都纹丝不动。
OR 或门——任意一扇门开着就能进入:办公楼有两个入口,前门或后门只要有一个开着,你就可以进去。任何一个入口开放(至少一个输入为 1),你就能通过(输出为 1)。
NOT 非门——按钮翻转指示牌:卫生间门口有一个"空闲/使用中"的翻转指示牌,按一下按钮就会翻转当前状态。输入为 0(空闲)则输出 1(使用中),反之亦然。
XOR 异或门——房间两盏灯必须一开一关:某个房间安装了两盏灯,规则是两盏灯的状态必须相反(一开一关),否则报警系统触发。因此两个输入不同时输出为 1,相同时输出为 0。
布尔代数简史
布尔代数由英国数学家 乔治·布尔(George Boole)于 1854 年在著作《思维定律的研究》中首次系统提出。布尔的目标是将人类逻辑推理数学化,他创造了一套用代数符号表达"真"与"假"的方法。
1938 年,克劳德·香农(Claude Shannon)在其 MIT 硕士论文中证明:布尔代数可以用来描述和简化继电器开关电路。这篇被称为"史上最重要的硕士论文"的工作,奠定了整个数字电路设计的理论基础。
可以说,没有布尔代数就没有数字电路,没有数字电路就没有现代计算机。你正在阅读这段话的设备内部,每秒钟正进行着数以亿计的布尔运算。
四种基本逻辑运算详解
AND 与运算
AND 运算的规则只有一句话:只有当所有输入都为 1 时,输出才为 1;否则输出为 0。你可以把它理解为串联开关——两个开关必须都闭合,灯泡才会亮。
| A | B | A AND B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
逻辑表达式:Y = A · B(有时省略点号,直接写作 Y = AB)。口诀:全 1 才 1。
OR 或运算
OR 运算的规则:只要有一个输入为 1,输出就为 1;只有全部输入为 0 时,输出才为 0。类比并联开关——任意一个开关闭合,灯泡就亮。
| A | B | A OR B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
逻辑表达式:Y = A + B(注意这不是算术加法,1+1 在布尔代数中仍等于 1)。口诀:有 1 就 1。
NOT 非运算
NOT 是唯一只接受一个输入的基本运算,规则最为简单:输出与输入相反。输入 1 则输出 0,输入 0 则输出 1。
| A | NOT A |
|---|---|
| 0 | 1 |
| 1 | 0 |
逻辑表达式:Y = A' 或 Y = NOT A。在电路图中常用输入线上的小圆圈表示取反。口诀:0 变 1,1 变 0。
XOR 异或运算
XOR 的规则:两个输入不同时输出为 1,相同时输出为 0。XOR 可以由 AND、OR、NOT 组合实现:A XOR B = (A' · B) + (A · B')。
| A | B | A XOR B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
逻辑表达式:Y = A XOR B。XOR 在加法器设计、奇偶校验、数据加密等领域有大量应用。口诀:不同为 1。
逻辑门符号
在数字电路图中,每种基本逻辑运算都有对应的标准逻辑门符号:
AND 门:符号为 D 形——一条直线边加一个半圆弧,两条输入线在左侧,一条输出线在右侧。
OR 门:符号为盾形——弧线内收的曲线,后端汇聚为尖点,表示"或"的逻辑含义。
NOT 门(反相器):三角形后接一个小圆圈——三角形表示缓冲/驱动,圆圈表示信号取反。
XOR 门:与 OR 门形状相似,但在输入端的弧线前多加一条弧线,用以区分"异或"。
任何复杂的数字电路——包括 CPU 内部的运算器、控制器——最终都可以分解为这四种基本逻辑门的组合。这便是布尔代数作为数字电路理论基础的根本原因。
附:逻辑门 SVG 图标与交互真值表(runoob 演示)
以下是四种基本逻辑门的标准符号展示,以及一个可交互的真值表——点击 A、B 按钮切换输入,观察对应行的输出变化。
四种标准逻辑门符号
交互真值表 —— 点击按钮切换输入
点击下方 A、B 按钮在 0/1 之间切换,观察表格中对应输入行被高亮
| A | B | AND | OR | NOT A | NOT B | XOR |
|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 1 | 1 | 0 |
| 0 | 1 | 0 | 1 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 | 0 | 0 | 0 |
交互演示
点击下方按钮切换输入 A 和 B 的值(0 或 1),观察各逻辑门的输出如何实时变化:
逻辑门交互演示(runoob 演示)
点击下方按钮切换输入 A 和 B 的值
| 逻辑门 | 逻辑表达式 | 当前输出 | 口诀 |
|---|---|---|---|
| AND 与门 | A AND B | - | 全 1 才 1 |
| OR 或门 | A OR B | - | 有 1 就 1 |
| NOT 非门 | NOT A | - | 0 变 1,1 变 0 |
| NOT 非门 | NOT B | - | 0 变 1,1 变 0 |
| XOR 异或门 | A XOR B | - | 不同为 1 |
Python 代码演示
下面用 Python 实现四种基本逻辑运算的函数,并自动生成完整的真值表,同时验证德摩根定律:
实例
def AND(a, b):
"""与运算:全 1 才 1"""
return 1 if a == 1 and b == 1 else 0
def OR(a, b):
"""或运算:有 1 就 1"""
return 1 if a == 1 or b == 1 else 0
def NOT(a):
"""非运算:取反"""
return 1 if a == 0 else 0
def XOR(a, b):
"""异或运算:不同为 1"""
return 1 if a != b else 0
def print_truth_table(title, func, inputs):
"""通用真值表打印函数"""
print(f"\n{'='*40}")
print(f" {title}")
print(f"{'='*40}")
if func.__code__.co_argcount == 1:
print(f" {'A':>4} | {'输出':>4}")
print(f" {'-'*13}")
for a in inputs:
print(f" {a:>4} | {func(a):>4}")
else:
print(f" {'A':>4} | {'B':>4} | {'输出':>4}")
print(f" {'-'*20}")
for a in inputs:
for b in inputs:
print(f" {a:>4} | {b:>4} | {func(a, b):>4}")
# 主程序:打印所有真值表
inputs = [0, 1]
print("runoob 布尔代数真值表完整演示")
print_truth_table("AND 与运算", AND, inputs)
print_truth_table("OR 或运算", OR, inputs)
print_truth_table("NOT 非运算", NOT, inputs)
print_truth_table("XOR 异或运算", XOR, inputs)
# 德摩根定律验证
print(f"\n{'='*40}")
print(" 德摩根定律验证")
print(f"{'='*40}")
print(" 定律 1: NOT(A AND B) = NOT A OR NOT B")
print(" 定律 2: NOT(A OR B) = NOT A AND NOT B")
for a in inputs:
for b in inputs:
left1 = NOT(AND(a, b))
right1 = OR(NOT(a), NOT(b))
left2 = NOT(OR(a, b))
right2 = AND(NOT(a), NOT(b))
print(f" A={a}, B={b}:")
print(f" 定律1: {left1} = {right1} -> {'OK' if left1 == right1 else 'FAIL'}")
print(f" 定律2: {left2} = {right2} -> {'OK' if left2 == right2 else 'FAIL'}")
