计算布尔表达式时,先把每个字母换成它的值(1 代表真,0 代表假),再按固定顺序算运算符:先括号,再 NOT,再 AND,最后 OR。每一步都会得到新的 1 或 0,所以再长的表达式也只是一串小判断。
这项技能位于布尔逻辑模块的开头,后面的真值表(truth table)、逻辑电路,以及你自己写算法时用到的条件,都以它为基础。
三个运算符分别做什么?
- NOT 把值反过来:NOT 1 = 0,NOT 0 = 1。
- AND 只有当两个输入都是 1 时才得 1。
- OR 只要至少有一个输入是 1 就得 1。
在剑桥风格的伪代码里,它们直接写成 NOT、AND 和 OR。放进条件语句里是这样:
IF (Age >= 13) AND NOT (HasConsent) THEN
OUTPUT "Ask a parent first"
ENDIF
一步一步怎么算
- 代入:把每个字母的值写在字母下面。
- 算括号:从最里面的一层开始。
- 算 NOT:作用于紧跟其后的一个值或一组括号。
- 算 AND:从左到右。
- 最后算 OR,得到的 1 或 0 就是答案。
例题
当 A = 0、B = 1、C = 0 时,求 Q = (A OR B) AND NOT C。
第 1 步,代入:(0 OR 1) AND NOT 0。
**第 2 步,括号:**0 OR 1 = 1,表达式变成 1 AND NOT 0。
**第 3 步,NOT:**NOT 0 = 1,表达式变成 1 AND 1。
**第 4 步,AND:**1 AND 1 = 1。
**Q = 1。**现在把 C 改成 1 再算一遍:(0 OR 1) AND NOT 1 = 1 AND 0 = 0。输入变了一个,输出跟着变,步骤却完全一样。
常见错误
有的同学不理会运算顺序,直接从左算到右。取 A = 1、B = 0、C = 0,表达式是没有括号的 A OR B AND C。
错误做法:(1 OR 0) AND 0 = 1 AND 0 = 0。
AND 比 OR 先算,所以正确做法是 1 OR (0 AND 0) = 1 OR 0 = 1。如果题目真的有括号,写成 (A OR B) AND C,答案才是 0。括号决定答案,所以要原样抄下,不要移动它。
你可以用 Python 检验自己的推理,因为 a or b and c 的顺序相同。受限伪代码追踪训练器和安全的 Python 推理沙盒适合用来检查小例子。
自测
1. 当 X = 1、Y = 1 时,求 NOT (X AND Y)。
查看答案
先算括号:1 AND 1 = 1。再 NOT 1 = 0。
2. 当 P = 0、Q = 1、R = 1 时,求 (P OR Q) AND NOT R。
查看答案
(0 OR 1) = 1。NOT 1 = 0。再 1 AND 0 = 0。
3. 当 A = 0、B = 1、C = 0 时,求 NOT A OR B AND C(没有括号)。
查看答案
先 NOT:NOT 0 = 1。再 AND:1 AND 0 = 0。最后 OR:1 OR 0 = 1。
接下来学什么?
当计算变得顺手后,继续学习制作真值表,对每一种可能的输入计算同一个表达式。然后试试布尔逻辑练习。布尔与数字表示实验室可以让你测试自己的小表达式。
如果你明白每条规则,布尔题的答案却还是出错,老师可以和你一起追踪那个失误。这正是我们一对一线上计算机科学补习关注的重点。