现在位置: 首页 > 计算机组成原理 > 正文

布尔代数基础 -- 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。你可以把它理解为串联开关——两个开关必须都闭合,灯泡才会亮。

ABA AND B
000
010
100
111

逻辑表达式:Y = A · B(有时省略点号,直接写作 Y = AB)。口诀:全 1 才 1。

OR 或运算

OR 运算的规则:只要有一个输入为 1,输出就为 1;只有全部输入为 0 时,输出才为 0。类比并联开关——任意一个开关闭合,灯泡就亮。

ABA OR B
000
011
101
111

逻辑表达式:Y = A + B(注意这不是算术加法,1+1 在布尔代数中仍等于 1)。口诀:有 1 就 1。

NOT 非运算

NOT 是唯一只接受一个输入的基本运算,规则最为简单:输出与输入相反。输入 1 则输出 0,输入 0 则输出 1。

ANOT A
01
10

逻辑表达式:Y = A'Y = NOT A。在电路图中常用输入线上的小圆圈表示取反。口诀:0 变 1,1 变 0。

XOR 异或运算

XOR 的规则:两个输入不同时输出为 1,相同时输出为 0。XOR 可以由 AND、OR、NOT 组合实现:A XOR B = (A' · B) + (A · B')。

ABA XOR B
000
011
101
110

逻辑表达式:Y = A XOR B。XOR 在加法器设计、奇偶校验、数据加密等领域有大量应用。口诀:不同为 1。


逻辑门符号

在数字电路图中,每种基本逻辑运算都有对应的标准逻辑门符号:

AND 门:符号为 D 形——一条直线边加一个半圆弧,两条输入线在左侧,一条输出线在右侧。

OR 门:符号为盾形——弧线内收的曲线,后端汇聚为尖点,表示"或"的逻辑含义。

NOT 门(反相器):三角形后接一个小圆圈——三角形表示缓冲/驱动,圆圈表示信号取反。

XOR 门:与 OR 门形状相似,但在输入端的弧线前多加一条弧线,用以区分"异或"。

任何复杂的数字电路——包括 CPU 内部的运算器、控制器——最终都可以分解为这四种基本逻辑门的组合。这便是布尔代数作为数字电路理论基础的根本原因。

附:逻辑门 SVG 图标与交互真值表(runoob 演示)

以下是四种基本逻辑门的标准符号展示,以及一个可交互的真值表——点击 A、B 按钮切换输入,观察对应行的输出变化。

四种标准逻辑门符号

A B Y
AND 与门
全1才1 · D形符号
A B Y
OR 或门
有1就1 · 盾形符号
A Y
NOT 非门
取反 · 三角+圆圈
A B Y
XOR 异或门
不同为1 · OR+弧线

交互真值表 —— 点击按钮切换输入

点击下方 A、B 按钮在 0/1 之间切换,观察表格中对应输入行被高亮

输入 A
0
输入 B
0
当前选中:A=0, B=0
ABANDORNOT ANOT BXOR
0000110
0101101
1001011
1111000

交互演示

点击下方按钮切换输入 A 和 B 的值(0 或 1),观察各逻辑门的输出如何实时变化:

逻辑门交互演示(runoob 演示)

点击下方按钮切换输入 A 和 B 的值

输入 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 实现四种基本逻辑运算的函数,并自动生成完整的真值表,同时验证德摩根定律:

实例

# runoob 测试:布尔代数 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'}")