布尔代数是一套处理二值状态的数学体系。变量通常只取 0 和 1,也可以解释为假与真、关闭与开启、低电平与高电平。它不使用普通算术中的加减乘除来描述数量,而是用 AND、OR、NOT 等逻辑运算表达条件之间的关系。
这套方法既是数字电路的理论基础,也广泛用于程序判断、数据库筛选和搜索条件。下面从符号与真值表开始,系统整理布尔代数定律、德摩根定律、表达式化简步骤和实际例子。
布尔代数的三种基本运算
布尔变量只能取两个值,三种基本运算分别是非、与、或:
| 运算 | 常用写法 | 输出为 1 的条件 |
|---|---|---|
| NOT(非) | A' 或 ¬A | A 为 0 |
| AND(与) | A · B 或 AB | A、B 都为 1 |
| OR(或) | A + B | 至少一个输入为 1 |
布尔代数中的加号表示 OR,不是数值相加,所以 1 + 1 = 1。相邻书写或乘号表示 AND,因此 1 · 0 = 0。例如:
Y = A(B + C')它表示:只有 A 为真,并且 B 为真或 C 为假时,Y 才为真。括号用来确定运算顺序;通常先计算 NOT,再计算 AND,最后计算 OR。
如果需要结合门电路理解这些符号,可以阅读逻辑门完整指南。若想复习 0、1 作为数位时的含义,可查看二进制数制。
用布尔真值表定义表达式
布尔真值表会列出所有可能的输入组合。若有 n 个相互独立的输入,完整真值表共有 2^n 行。两个输入有四行,三个输入有八行。
以表达式 Y = A + B' 为例:
| A | B | B' | Y = A + B' |
|---|---|---|---|
| 0 | 0 | 1 | 1 |
| 0 | 1 | 0 | 0 |
| 1 | 0 | 1 | 1 |
| 1 | 1 | 0 | 1 |
计算复杂表达式时,先为中间结果建立列往往最稳妥。这里先求 B',再将它与 A 做 OR。两个布尔表达式只有在每一行的最终输出都相同时才等价,不能只比较一两个示例输入。
布尔代数基本定律
布尔代数定律允许我们在不改变输出的前提下重排、展开或删除项。以下规则对变量的两个可能取值都成立。
同一律与支配律
同一律不会改变原值:
A + 0 = A
A · 1 = A支配律会把结果固定下来:
A + 1 = 1
A · 0 = 0它们常用于消除表达式中已经确定的启用或禁用条件。
幂等律、互补律与双重否定
重复同一个条件不会增加信息:
A + A = A
A · A = A一个变量与其反变量组合后,结果恒定:
A + A' = 1
A · A' = 0
(A')' = A这些规则能够删除重复判断、互相矛盾的条件和多余的两次取反。
交换律与结合律
AND 和 OR 都允许交换顺序:
A + B = B + A
AB = BA相同运算还可以重新分组:
(A + B) + C = A + (B + C)
(AB)C = A(BC)但这不意味着 AND 与 OR 可以随意跨越移动。混合运算仍要遵守括号和运算优先级。
分配律
AND 对 OR 的分配形式与普通代数相似:
A(B + C) = AB + AC布尔代数还有一个对偶形式,即 OR 对 AND 分配:
A + BC = (A + B)(A + C)第二个等式在普通算术中并不成立,但可以通过展开、幂等律和吸收律验证。
吸收律
吸收律删除已经被更宽泛条件覆盖的项:
A + AB = A
A(A + B) = A在 A + AB 中,只要 A 为 1,结果就已经为 1;若 A 为 0,AB 也必然为 0。因此 B 无法改变输出,AB 是冗余项。
德摩根定律
德摩根定律说明取反如何穿过括号中的 AND 或 OR:
(AB)' = A' + B'
(A + B)' = A'B'把否定移入括号时,必须同时完成两件事:对每个变量取反,并把 AND 与 OR 互换。例如,“两个检查并非都通过”可写成 (AB)',它等价于“第一个检查未通过,或第二个检查未通过”,即 A' + B'。
三个变量也按同一规则处理:
(ABC)' = A' + B' + C'
(A + B + C)' = A'B'C'最常见的错误是只给变量加撇号,却忘记交换运算符。(A + B)' 的结果是 A'B',不是 A' + B'。
如何化简布尔表达式
面对较长的布尔表达式,可以按以下顺序处理:
- 先消除双重否定,并用同一律、支配律处理常量。
- 只在有助于暴露重复项、互补项时展开或提取公因子。
- 用交换律和结合律把相关项放在一起。
- 应用幂等律、互补律和吸收律删除冗余项。
- 重复检查,直到没有可以继续删除的项。
- 对关键结果建立完整真值表,验证化简前后输出一致。
最短表达式不一定是最佳实现。硬件设计还要考虑现有门类型、传播延迟、功耗和毛刺;程序代码则要兼顾可读性以及短路求值产生的运行时行为。
四个表达式化简示例
示例一:化简 A + A'B
使用对偶分配律:
A + A'B
= (A + A')(A + B)
= 1(A + B)
= A + B因此,原表达式与 A + B 在全部四种输入组合上具有相同输出。
示例二:删除互补分支
化简 AB + AB':
AB + AB'
= A(B + B')
= A · 1
= A无论 B 是 0 还是 1,B 与 B' 中总有一个为真,所以结果只取决于 A。
示例三:结合分配律与吸收律
(A + B)(A + C)
= AA + AC + AB + BC
= A + AC + AB + BC
= A + BC幂等律把 AA 变成 A,随后 A 吸收 AC 和 AB。
示例四:应用德摩根定律
(A + B')'
= A'(B')'
= A'B外层取反把 OR 变成 AND,并对两个输入取反;双重否定再把 (B')' 还原为 B。
与项之和与或项之积
布尔表达式常写成两种规范结构。
与项之和(SOP)是多个 AND 项再进行 OR,例如 A'B + AB'。规范 SOP 中,每个乘积项包含全部变量,并可对应真值表中输出为 1 的一行。
或项之积(POS)是多个 OR 项再进行 AND,例如 (A + B)(A' + C)。每个和项可以对应真值表中输出为 0 的一行。
规范形式便于从真值表机械生成表达式,但通常不是最短形式。还可以使用卡诺图或逻辑化简软件进一步减少项数。SOP 自然对应“先 AND 后 OR”的门网络,POS 则对应“先 OR 后 AND”。
布尔代数在数字电路中的作用
每种基础逻辑门都实现一个布尔运算:AND 门实现逻辑与,OR 门实现逻辑或,NOT 门实现取反;NAND、NOR、XOR 和 XNOR 则提供常用组合关系。
化简表达式通常可以减少门和连线。例如,直接实现 AB + AB' 需要两条 AND 路径、一个反相器和一个 OR 级;化简为 A 后,在理想逻辑模型中可以直接连接信号。
不过,布尔等价只保证稳定状态下的功能相同。真实电路还有传播延迟、电气负载、时钟时序和竞争冒险等问题。工程设计必须在逻辑正确之外继续验证这些物理约束。
布尔规则也会以按位运算的形式出现在软件中。1010 AND 1100 得到 1000,因为每一列都独立遵循 AND 真值表。需要检查普通二进制算术时,可以使用二进制计算器;算术加法会传播进位,而按位逻辑不会。
程序条件与查询中的布尔逻辑
程序语言使用各自的符号表达相同的逻辑关系:
const canPublish = isEditor && (isOwner || hasApproval);这里 && 表示 AND,|| 表示 OR。多数语言采用短路求值:结果一旦确定,就可能不再执行右侧表达式。因此,如果条件中包含函数调用或其他副作用,不能仅凭布尔代数等价就随意重写。
数据库和搜索条件同样需要清晰的括号。例如 status = published AND (category = guide OR category = reference) 与不加括号的表达式可能匹配不同记录。
常见错误
- 把布尔加号当成算术加法;在布尔代数中,
A + A = A。 - 使用德摩根定律时只取反变量,却没有交换 AND 和 OR。
- 未确认优先级就删除括号,导致表达式含义改变。
- 只测试少量输入便断言两个表达式等价。
- 认为真值表相同的两个电路一定具有相同延迟和毛刺特性。
- 混淆程序中的逻辑运算符、按位运算符和普通二进制算术。
常见问题
布尔代数有什么用途?
它用于描述与化简数字电路、编写程序条件、组合数据库与搜索过滤器、验证逻辑等价,以及分析任何由二状态决策构成的系统。
布尔代数是谁提出的?
乔治·布尔在 19 世纪建立了符号逻辑的代数基础。后来,克劳德·香农等人的工作把这套逻辑与开关电路联系起来,使它成为数字工程和计算机科学的基础。
布尔代数与二进制算术相同吗?
不同。两者都使用 0 和 1,但布尔代数把它们视为逻辑状态,并执行 AND、OR、NOT;二进制算术把它们视为二进制数位,需要处理进位与借位。二进制加法可以直观展示这种区别。
最重要的布尔代数定律有哪些?
实际化简最常用的是同一律、支配律、幂等律、互补律、交换律、结合律、分配律、吸收律和德摩根定律。
怎样证明两个布尔表达式等价?
可以用有效定律把一个表达式变换为另一个,也可以分别建立完整真值表并逐行比较输出。对于有限个布尔变量,完整真值表是穷尽性验证。
为什么要化简布尔表达式?
化简能够暴露无效条件,并减少逻辑运算、门数量、连线、功耗或代码复杂度。完成化简后仍需结合可读性、时序和具体实现条件评估最终方案。
总结
布尔代数把二状态决策变成可计算、可验证的数学表达。真值表定义行为,基本定律保持等价,德摩根定律负责在否定穿过括号时交换运算,而化简过程则删除不会影响输出的条件。掌握这些规则后,逻辑门、按位运算和复杂程序判断都会更容易分析。
