H3

布尔代数与逻辑门

点击正文段落选定收藏或划线位置;未选定时使用屏幕内第一段。

课内目录

1 为什么先学布尔,而不是直接画电路

上一课把数值和位串的解释说清楚了;本课转向另一线索同样基础的线索:怎样用 0 与 1 表达「成立 / 不成立」,并把多个条件组合成可计算的判定。云平台里的安全组、防火墙、特征开关、权限策略,表面上都是产品配置,底层却反复出现同一种结构:若干输入条件,经过固定规则,得到允许或拒绝的输出。若不能先掌握布尔运算与逻辑门,后面的组合电路、加法器、比较器和控制逻辑都会变成符号记忆。

布尔量只有 2 种取值。教学上写 0 与 1,也常写假与真。关键不在符号,而在运算定义:给定输入组合,输出必须唯一确定。真值表把每一种输入组合与输出逐行列出,是核对定义的标准工具。对 1 个输入,组合数是 2;对 2 个输入,组合数是 4;对 3 个输入,组合数是 8;对 n 个输入,组合数是 2 的 n 次方。组合数会迅速变大:4 输入已有 16 行,5 输入有 32 行,8 输入有 256 行。所以工程上既要会画小表,也要会用代数律压缩表达,还要会用「关键用例」做抽查,并写明未穷举时的风险。

把布尔学扎实,还有 3 个直接收益。第一,读配置时能把「且 / 或 / 非」还原成可测试的命题,而不是凭产品文案猜测。第二,写规则时能主动加括号、列验收用例,减少「上线后才发现或条件写反」的事故。第三,进入 H4 组合逻辑时,加法器、比较器、多路选择器不再是黑盒符号,而是「真值表 + 门网」的具体对象。

本课目标不是背诵门电路商标,而是练 4 项能力:读懂并填写真值表;用与、或、非、异或写出等价表达式;用德摩根律做等价改写;解释最小项怎样覆盖需要的输出。学完后应能把「端口 443 且来源在允许网段」写成布尔式,也能把「非(A 且 B)」改写成更易用或非门实现的形式,并用至少 4 行真值表证明两者一致。

举例对照:某团队把发布开关写成「环境为生产 或 强制开关打开」。若强制开关被误置为真,非生产环境也会放行。用布尔式 Y = P ∨ F 一眼能看出 F=1 时 Y 恒为 1;若本意是「仅生产,且可被强制关闭」,应写成 Y = P ∧ ¬F。符号差 1 个连接词,验收用例集合完全不同。本课反复强调:先写清命题,再选门与代数变形。

与后续课程的分工也要写清。H4 讨论如何用门网实现算术与选择;H5 引入时钟与状态。本课若过早混入「下一拍才更新」的说法,会把组合与时序搅在一起。遇到「按一下保持」的需求,先标记为时序,留给 H5,本课只负责当前输入到当前输出的函数。

从条件判定到逻辑门的对应
从条件判定到逻辑门的对应

2 真值表:把「所有可能」摊开

先看 1 个输入的非运算。输入 A 为 0 时输出为 1;A 为 1 时输出为 0。真值表只有 2 行,却已经说明:非运算没有「差不多」,每个输入都必须有明确输出。硬件上非门还会引入延迟,但功能语义仍是这 2 行。

再看 2 输入与运算。输入记为 A、B,输出记为 Y。约定:Y 为 1 当且仅当 A 与 B 都为 1。于是 4 行是:

ABY=A∧B
000
010
100
111

或运算约定:Y 为 1 当且仅当 A 与 B 至少 1 个为 1。于是仅在 A=B=0 时输出为 0,其余 3 行为 1。异或约定:Y 为 1 当且仅当 A 与 B 不同。于是 01 与 10 为 1,00 与 11 为 0。同或则是异或的非,在两端相同为 1:可用 ¬(A⊕B) 或 (A∧B)∨(¬A∧¬B) 表示。

真值表还有验收用途。若有人声称「这个表达式等于与运算」,就逐行代入 4 种输入,看输出是否与标准与表一致。任何 1 行不同,声明失败。输入更多时,穷举成本上升,但仍是黄金标准;代数化简是加速手段,不能替代最终核对。对 3 输入函数,完整表有 8 行;若只抽查 2 行就宣称正确,属于证据不足。

动手练习:令 Y = (A∨B)∧¬C。请列出 C=0 与 C=1 时 A、B 的 4 种组合,共 8 行,标出 Y。你会看到 C=1 时 Y 全 0;C=0 时 Y 与「A 或 B」相同。这个结果用分配与零律也能推出,但先会填表,再谈化简,顺序更稳。

把真值表当作合同文本来写。表头写清变量顺序,例如固定为 A,B,C 从左到右,避免同行编号与变量序不一致。表中输出列只允许 0/1(本课不考虑高阻 Z)。若函数有多个输出,每个输出单独 1 列,或拆成多张表。评审时若两人对同一行的输出争执,先回到定义,而不是改画门符号。

对「任意 2 输入函数」计数:输出列有 4 位,每位 2 选,共 16 种不同函数。其中与、或、异或、与非、或非、同或、恒 0、恒 1、投影到 A、投影到 B 等,都是这 16 种里的成员。见到陌生符号时,先问它的 4 位输出串是什么,再谈名字。

2 输入与、或、异或真值表对照
2 输入与、或、异或真值表对照

3 基本门:与、或、非、与非、或非、异或

逻辑门是对基本运算的电路抽象。与门实现 ∧,或门实现 ∨,非门实现 ¬。与非是与后再非,或非是或后再非。许多工艺里,与非/或非比「与再加非」更贴近底层单元,但本课先把功能语义学稳:与非的输出在「输入不全为 1」时为 1;或非的输出仅在「输入全 0」时为 1。把与非真值表写全:00→1,01→1,10→1,11→0。或非:00→1,其余为 0。

异或门常记作 ⊕。它在加法器里出现:无进位的按位加就是异或;进位则与「与」有关。2 位半加器:和 S = A⊕B,进位 C = A∧B。安全与校验里也常见:奇偶校验位可看作若干比特的异或折叠。教学上记住一句:异或检测「是否不同」,不检测「谁更大」,也不表示算术减法。

符号画法因教材而异,但端口含义一致:左侧或上方为输入,右侧或下方为输出;非用小圆圈表示取反。阅读原理图时,先数清输入个数,再确认有没有输出端的小圆圈——漏看 1 个非,整段逻辑会反相。多输入与门若画成 3 输入,真值表按 8 行理解,不要误当成 2 输入级联却忘了中间节点。

把 6 种常用门的「一句话」记牢,便于口试与排障:与=全 1 才 1;或=有 1 则 1;非=取反;与非=全 1 才 0;或非=全 0 才 1;异或=不同才 1。默写时不要只背名字,要能立刻写出 2 输入真值表的 4 个输出位串,例如与是 0001,或是 0111,异或是 0110,与非是 1110,或非是 1000。

复合门可以互相表达。理论上,仅用与非就能实现与、或、非(功能完备集);仅用或非也可以。证明思路简述:¬A = A 与非 A;A∧B = ¬(A 与非 B 的与非形式) 等。工程选型会考虑延迟、面积与单元库,但完备性告诉我们:门种类变少时,仍可能实现任意组合逻辑,代价是级数与面积可能增加。本课验收以真值表为准,不以「用了哪种完备集」为荣。

延迟直觉:若每级门延迟记为 1 个单位,则「与后再非」至少 2 级,而直接与非可能 1 级完成同功能。H4 会把级数与进位链放在一起讨论;这里只需建立「功能等价 ≠ 延迟等价」的意识。

4 布尔代数律:让式子可变短、可变形

化简不等于越短越好到不可读。有时保留 1 个中间变量名称,能让运维读懂。例如令 Ready = Power ∧ Link,Allow = Ready ∧ Auth。实现上仍是 3 输入与,但文档层分成 2 步,排障时可先查 Ready 再查 Auth。代数上 Allow = Power ∧ Link ∧ Auth,与分步定义等价。教学与工程可以并存:推导用短式,对外说明用命名子句。对偶原理值得知道:把表达式中的 ∧ 与 ∨ 互换、0 与 1 互换,得到对偶式;若原式恒真,对偶式也恒真。本课不要求背诵全部对偶表,但见到成对定律时,应能指出它们的对称性。

布尔代数有 1 组常用律,用来在不改真值表的前提下改写表达式。交换律:A∧B = B∧A,A∨B = B∨A。结合律:括号可重排,例如 (A∧B)∧C = A∧(B∧C)。分配律:A∧(B∨C) = (A∧B)∨(A∧C),以及 A∨(B∧C) = (A∨B)∧(A∨C)。同一律与零律:A∨0=A,A∧1=A,A∨1=1,A∧0=0。互补律:A∨¬A=1,A∧¬A=0。幂等律:A∨A=A,A∧A=A。吸收律:A∨(A∧B)=A,A∧(A∨B)=A。

这些律不是装饰。例如安全规则「来源合法 或 (来源合法 且 调试开关开)」可被吸收律收成「来源合法」——若业务本意不是这样,说明需求写错了,而不是代数错了。化简能暴露需求冗余,也能减少门数。再如 A∧(A∨B) 吸收为 A,意味着内层的 B 对结果无贡献,评审时应确认 B 是否本该出现在别处。

操作建议:每次改写后,挑 2~3 组关键输入(尤其是边界组合)代入新旧两式,确认仍一致;对小输入数,必要时重建真值表。不要连续变换十几步却从不核对——错误会在中途被放大。推荐记录格式:步骤编号、使用的律、式子、抽查输入与结果。

数值化例子:令 A 表示「CPU 利用率 > 80」,B 表示「队列堆积 > 100」。告警式 A∨(A∧B) 化简为 A 后,队列条件从该式消失。若产品仍希望「高 CPU 且高队列」才升级为紧急,应改写为 A∧B,而不是在化简后的 A 上继续打补丁。

常用布尔律的卡片对照
常用布尔律的卡片对照

5 德摩根律:把「非」推进括号

把德摩根用到监控表达式。原式 Alert = CPU_high ∧ Mem_high。静默时不想告警,写成 ActiveAlert = Alert ∧ ¬Mute。若日志只存 ¬ActiveAlert,展开为 ¬CPU_high ∨ ¬Mem_high ∨ Mute。值班同学看到未激活时,应沿 3 个析取支路取证。再看双重否定:¬¬(A∨B) = A∨B。配置里连续取反 2 次容易留下难读的 ¬¬。评审时应化简掉可见的双重非,除非刻意保留开关层语义并加注释。

德摩根律有 2 条核心形式:

  1. ¬(A∧B) = ¬A ∨ ¬B
  2. ¬(A∨B) = ¬A ∧ ¬B

口语记忆:「非(两者都成立)」等于「至少 1 个不成立」;「非(至少 1 个成立)」等于「两者都不成立」。推广到更多输入时,非落在与上变成各输入取非后再或;非落在或上变成各输入取非后再与。对 3 输入:¬(A∧B∧C)=¬A∨¬B∨¬C;¬(A∨B∨C)=¬A∧¬B∧¬C。

德摩根在实现与排查里都很有用。若器件库里或非门延迟更优,可能把 ¬(A∧B) 直接映射到与非/或非结构的等价形式。若日志写「规则未同时满足 A 与 B」,等价于「缺 A 或缺 B」,排障时应分别取证,而不是只盯着「与」本身。权限拒绝文案若能映射到德摩根展开,用户更容易知道缺的是哪 1 个条件。

练习 1:把 ¬(A∨(B∧C)) 推到只在变量上取非。先对 ∨ 用德摩根:¬A ∧ ¬(B∧C);再对内层与用德摩根:¬A ∧ (¬B ∨ ¬C)。最后可用分配律写成 (¬A∧¬B)∨(¬A∧¬C)。逐步写下中间式,避免口算跳步。

练习 2:验证 ¬(A∧B) 与 ¬A∨¬B 在 4 行上完全一致。你会看到仅当 A=B=1 时左边为 0、右边也为 0;其余 3 行两边都为 1。把这 4 行当作回归用例,写进笔记。

6 最小项与标准形:用「哪些行输出为 1」描述函数

对 n 个变量,每 1 行真值表对应 1 个最小项:该行输入取值的与项,并对取 0 的变量写非。以 2 变量为例:行 00 对应 ¬A∧¬B;行 01 对应 ¬A∧B;行 10 对应 A∧¬B;行 11 对应 A∧B。任意组合函数都可以写成「输出为 1 的那些最小项」的或,这就是积之和标准形之一。

例如异或:输出为 1 的行是 01 与 10,于是 Y = (¬A∧B) ∨ (A∧¬B)。这与「A、B 不同」的叙述一致。与运算只保留 11 行:Y = A∧B。或运算保留 01、10、11 共 3 行。标准形可能不是最短式,但它提供系统化构造:先圈出为 1 的行,再写或项,再化简。

当变量变多,最小项编号常用二进制行号。3 变量时行号 0~7 对应 000~111。若函数在行号 1、3、7 为 1,则先写出对应最小项再或起来,再用吸收或卡诺图化简。工程上会用软件化简;本课要求掌握「从真值表到标准形」的手工路径,以便读懂工具输出,并在 3~4 变量内独立完成。

反例:有人只写「Y 在大多数时候为 1」却不给表。标准形逼你列出为 1 的行集合,集合一旦明确,实现与测试就有共同契约。若集合含 5 个最小项,测试至少应覆盖这 5 个为 1 的输入,外加若干为 0 的输入以防过拟合。

无关项(don't care)在化简时可能出现:某些输入组合在物理上不会发生,或输出被规定为随意。教学上先掌握无无关项的标准形;引入无关项后,化简可能更短,但必须在方案中列出无关项集合,否则测试无法判断对错。本课例题默认无无关项。

最小项覆盖异或的 2 个为 1 行
最小项覆盖异或的 2 个为 1 行

7 从业务判定到布尔式:可迁移的写法

练习题先自答再对答案:条件为周末或节假日,且非维护窗口,且(内部用户或持有临时票)。原子化:W=周末,H=节假日,M=维护,I=内部,T=临时票。初稿 Y = (W∨H) ∧ ¬M ∧ (I∨T)。验收用例至少 5 条:工作日非节假日应为 0;周末且维护应为 0;周末非维护且内部应为 1;节假日非维护仅临时票应为 1;工作日非节假日但内部应为 0。若产品把周末定义成含周五 18:00 后,那是原子条件 W 的取证问题,不是连接词问题。不要把 I∨T 写成 I∧T。

把自然语言判定写成布尔式,建议固定 4 步:

  1. 列出原子条件,每个条件只能为真或假,避免「大概安全」这类模糊词。
  2. 明确连接词:并且、或者、恰好 1 个、除非。
  3. 写初稿表达式,必要时加括号。
  4. 用真值表或关键用例验收,尤其是「全假」「全真」「只中 1 个条件」3 类。

例:允许访问当且仅当「使用 TLS」且「来源网段允许」。令 T=使用 TLS,S=来源允许,则 Y = T ∧ S。4 行验收:00→0,01→0,10→0,11→1。若业务改为「管理网或(TLS 且来源允许)」,令 M=管理网,则 Y = M ∨ (T ∧ S)。注意括号:M ∨ T ∧ S 在不同约定下可能被误读,写成 M ∨ (T ∧ S) 更安全。再补 2 个用例:M=1 且 T=S=0 应允许;M=0 且 T=1、S=0 应拒绝。

反例:把「用户是管理员或审计员」写成 A∨B 没问题;若产品实际要求互斥角色,应写成异或或「(A∨B)∧¬(A∧B)」并回头改产品规则。布尔式忠实反映规则;规则含糊时,先澄清产品语义。另一反例:把「除非维护中」写成 ∨W 而不是 ∧¬W,会在维护窗口误开放。

参数滑块用来建立组合规模直觉:输入条件数增加时,完整真值表行数按 2 的 n 次方增长;若还允许「任意布尔函数」,不同函数的数量是 2 的 (2^n) 次方。教学模型只展示规模压力,不声称某产品的规则引擎有此上限。

补充数值例:对表达式 Y=(A∨B)∧(A∨¬B)∧(¬A∨B),先对前 2 项用分配与互补思想化简。A∨B 与 A∨¬B 的与等于 A∨(B∧¬B)=A∨0=A,再与 (¬A∨B) 得到 A∧(¬A∨B)= (A∧¬A)∨(A∧B)=A∧B。整式化简为 A∧B。建议读者独立完成每 1 步并保留草稿,再与本段对照。该例说明:看起来复杂的 3 因子与式,可能只是与运算的展开,真值表 4 行即可终结争论。

再补 1 组对照:令 F1=A⊕B,F2=(A∨B)∧¬(A∧B)。逐行验证 F1 与 F2 皆为 0110,于是异或的 2 种定义合一。实现时可按单元库选择异或门或「或、与、非」拼装,功能验收仍看这 4 行。

8 常见坑:语感、优先级与多余的非

坑 1:自然语言「或」与布尔或混淆。合同里的「或」有时是互斥;布尔或默认相容。写进系统前,用例子确认「两者同时成立」是否允许。若不允许,显式写异或或加 ¬(A∧B) 约束。

坑 2:省略括号。许多语言里 ∧ 优先级高于 ∨,但教材与人脑不完全一致。对教学与跨语言文档,关键处一律加括号。把 Y = A∨B∧C 改写争议,直接写成 Y = A∨(B∧C) 或 Y = (A∨B)∧C 之一。

坑 3:连续取非数错。¬¬A = A,但在原理图上连续小圆圈容易看漏。改写时可用临时变量打断:令 N1=¬A,再处理 N1。

坑 4:把时序当成组合。本课的门是无记忆的:输出只依赖当前输入。若「按下按钮后保持亮灯」,那是锁存/触发器,属于 H5 时序课,不要强行只用与或非解释。

坑 5:用真值表验证时漏行。2 输入必须 4 行都查;声称「我抽查了 11」不够。自动化测试也应生成全部组合,或对更大空间做系统性采样并记录未覆盖风险。对 4 输入若只测 5 组,应在方案里写明覆盖率与残余风险。

坑 6:把「默认拒绝」写成默认 0 却漏了显式允许行。安全策略常采用「无匹配则拒绝」;对应布尔函数在未列出的最小项上应为 0。若误把未列行当成无关项乱化简,可能引入额外允许。

9 案例:准入条件与告警掩码

案例 F:灰度与回滚。令 G=灰度命中,R=回滚开关,Base=基础允许。生效 E = ¬R ∧ (Base ∨ G)。回滚打开时 E 恒 0;回滚关闭时,基础用户或灰度用户可过。错误式 E = ¬R ∨ (Base ∨ G) 会在 R=0 时几乎恒真。用 R=1,Base=1,G=1 检查:期望 0,错误式为 1。案例 G:双人复核。令 A=申请人批准,B=复核人批准,Self=同一人。通过 P = A ∧ B ∧ ¬Self。若系统无法证明 Self,就无法实现该式,应在方案标红。

案例 A:API 网关准入。条件:路径前缀匹配(P),令牌有效(K),不在维护窗口(¬W)。允许 Y = P ∧ K ∧ ¬W。用德摩根看拒绝原因:¬Y = ¬P ∨ ¬K ∨ W。运维告警文案可据此拆成 3 路:前缀失败、令牌失败、处于维护。这比只报「拒绝」更可操作。用 1 组数验收:P=1,K=1,W=1 → Y=0;P=1,K=1,W=0 → Y=1;P=0,K=1,W=0 → Y=0。

案例 B:告警掩码。3 个告警位 A1、A2、A3,总告警 T = A1 ∨ A2 ∨ A3。静默开关 M 打开时压制输出,S = T ∧ ¬M。若误写成 S = T ∨ ¬M,则静默开关打开时:当 M=1 时 ¬M=0,S=T∨0=T,看似还行;再查 M=0 时 ¬M=1,S=T∨1=1,即未静默时输出恒 1,完全坏掉。用真值表取 M=0、T=0 可立刻抓出:期望 S=0,错误式给出 1。

案例 C:奇偶校验教学模型。2 比特数据 D1、D0,偶校验位 P = D1 ⊕ D0。接收端计算 D1 ⊕ D0 ⊕ P,为 0 表示该模型下一致。翻转任意 1 比特会使结果为 1。这不是完整差错控制,但说明异或如何折叠「是否翻转」。扩展到 4 比特时,P 为 4 个数据位的异或,检测能力仍是「奇数个翻转」,对 2 个同时翻转可能漏检——边界要写进方案。

案例 D:特征开关分层。令 Canary=C,Full=F,内部用户=I。目标:全量开启或(金丝雀且内部用户)。Y = F ∨ (C ∧ I)。禁止写成 F ∨ C ∧ I 而不加括号。验收:F=0,C=1,I=0 → 应拒绝;F=0,C=1,I=1 → 应允许;F=1 任意 → 应允许。

案例 E:权限中的显式拒绝。令 Allow=A,Deny=D,有效权限 E = A ∧ ¬D。这与「显式拒绝优先」的教学模型一致:只要 D=1,E 必为 0。若误写成 E = A ∨ ¬D,则 D=0 时 E 恒 1,扩大授权。用 4 行表对比 2 种式子,是 IAM 入门课之前就能做的布尔练习。

准入条件分解为与或非
准入条件分解为与或非

深入练习:取 Y = (A∧¬B)∨(¬A∧B)∨(A∧B)。先认出这是「A 或 B」的标准形之一,再用代数化简:前 2 项是异或,再加上 A∧B 得到 A∨B。用 4 行真值表核对,确认化简前后一致。再取 Z = A∧(¬A∨B),化简为 A∧B,解释「A 已经为真时,¬A∨B 只剩对 B 的约束」。

对 3 输入多数表决函数 Maj(A,B,C):输出为 1 当且仅当至少 2 个输入为 1。为 1 的最小项行号(ABC 二进制)是 011、101、110、111,即 3、5、6、7。写出标准形后,可化简为 (A∧B)∨(A∧C)∨(B∧C)。该式在比较器、冗余投票与简单容错教学中反复出现;本课要求能从定义走到标准形,再走到化简式。

把安全组规则「允许 22 端口来自网段 S,且不在封锁名单 B」写成 Y = Port22 ∧ S ∧ ¬B。若产品还有「紧急旁路 E」,变成 Y = E ∨ (Port22 ∧ S ∧ ¬B)。画出 3 个优先检查点:E 是否被审计;E 打开时是否仍记录;关闭 E 后 4 行关键组合是否回到收紧策略。布尔式本身不提供审计,但能逼出旁路条件的显式位置。

把以上案例横向对比:准入、告警、校验、特征开关、显式拒绝、灰度回滚、双人复核,共用同一套工具——原子条件、连接词、真值表、德摩根展开。差别只在条件语义与验收用例。掌握工具后,换领域只换词汇表,不换方法。这正是本课放在硬件路径前部的原因:它服务 H4 与 H5,也服务后续云上策略课。

实验室小练习,纸笔即可。第一,填写与非、或非的 4 行表,并与先与后非、先或后非逐步对照。第二,化简 (¬A∧B)∨(A∧B)∨(A∧¬B),目标得到 A∨B,写出每步所用定律。第三,对 ¬(A∨¬B∨C) 做德摩根,得到 ¬A∧B∧¬C,再用 8 行中的 2 行抽查。第四,设计 1 个 3 输入函数,使其为 1 的行恰好 2 行,写出最小项或式与化简尝试。第五,把仅当调试开关关闭时才要求 TLS 写成布尔式,并给出 4 行表。提示:令 D=调试开,T=TLS,1 种写法是 (¬D∧T)∨D,化简为 D∨T;确认是否符合本意,若本意是调试时可明文,则 D∨T 正确;若本意是调试时仍要 TLS,则应写成 T。

术语对照宜短:∧ 称与、逻辑乘;∨ 称或、逻辑加;¬ 称非、取反;⊕ 称异或;真值表称 truth table;最小项称 minterm;功能完备集称 functionally complete set。中英文混用时,以真值表定义为准。见到 NAND 即与非,NOR 即或非,XNOR 即同或。历史指针极短:布尔提供代数框架;香农把布尔代数与继电器电路联系起来。现代 CMOS 门实现细节不在本课范围。

再补 1 段关于多输出的说明。同一组输入可以驱动多个输出函数,例如半加器同时产生和与进位。每个输出有自己的真值表列,化简也按列独立进行,但实现时可能共享中间项以节省门。本课先要求按输出分别写清式子;共享中间项的提取留给 H4 的多级网络讨论。若 2 个输出的式子经化简后完全相同,应怀疑需求是否重复,或编码是否浪费了 1 个引脚含义。数值例子:输入 A,B;输出 X=A∧B,Y=A∨B,Z=A⊕B。3 列输出互不相同,测试时 4 种输入要核对 12 个比特的期望值。把期望做成表驱动测试,比口头说一声测过了可靠得多。

最后用 1 个综合练习收束本节到放进方案之间的过渡:给定输入 A,B,C,要求输出在 ABC=001、011、101 时为 1,其余为 0。先写最小项或式 (¬A∧¬B∧C)∨(¬A∧B∧C)∨(A∧¬B∧C),再尝试提取公因子 C∧(¬A∧¬B ∨ ¬A∧B ∨ A∧¬B)。继续化简内部,得到 C∧(¬A∨¬B) 是否正确,需用真值表 8 行核对;若发现 ABC=111 被错误包含或遗漏,立即回退。把核对过程写入笔记,作为放进方案里测试向量表示例。

若化简后得到 C∧¬(A∧B),再用德摩根写成 C∧(¬A∨¬B),与上文候选式对照。8 行中为 1 的行应仍是 001、011、101;111 必须为 0,因为 A∧B∧C 被 ¬(A∧B) 排除。把这 8 行期望输出写成向量,例如按 ABC 从 000 到 111 为 01010100,可直接做表驱动自测。

完成向量核对后,才能声称该函数已准备好进入方案冻结;未核对方向量的化简结果不得直接交付实现。

向量核对完成后不得跳过抽查步骤。

放进方案里

在方案或设计笔记中,把布尔与门级约定写清楚,避免后续电路与策略课返工:

  1. 原子条件清单:名称、真假含义、取证方式;禁止模糊形容词。至少列出每个条件的 1 个为正例与 1 个为反例。
  2. 连接词表:并且/或者/异或/除非;对「或」声明相容或互斥。
  3. 目标表达式:含括号的布尔式,并附 1 份完整或关键真值表;2~3 变量应尽量完整。
  4. 等价改写记录:应用了哪条律(尤其德摩根),改写前后的抽查输入不少于 3 组。
  5. 实现约束:可用门类型、是否允许与非/或非、延迟级数上限(若已知)。
  6. 与业务验收对齐:列出「应允许」与「应拒绝」用例各至少 3 条,并写明对应输入赋值。
  7. 边界声明:本层是组合逻辑;需要记忆或边沿触发的行为单列,不塞进本式。
  8. 文档同步:策略引擎、安全组与硬件描述若共用同一判定,引用同一条件编号,避免 2 份文案漂移。
  1. 测试向量表:对 2~3 变量附完整输入输出;对更大变量附生成方法与种子。
  2. 评审问题清单:相容或是否澄清、括号是否完备、德摩根改写是否抽查、时序需求是否误写入组合式。

把以上条目收成 1 页检查表即可进入评审:条件是否原子化、连接词是否无歧义、表达式是否带括号、真值表或用例是否覆盖全假/全真/单条件、德摩根改写是否留痕、组合与时序是否分家、旁路与显式拒绝是否显式出现。缺任何 1 项,都可能在 H4/H5 或策略课返工。

检查表执行时建议双人交叉:1 人根据式子出用例,另 1 人根据用例反推式子,两边闭合再冻结版本。版本号与变更说明要写清,避免口头改了连接词却未更新真值表。 写完后做 1 次双向检查:从用例推表达式,再从表达式生成用例,看是否闭合。若发现吸收律删掉了某条件,先问产品是否仍需要该条件,再决定是否保留冗余以实现防御性清晰。

10 小结:下一课走向组合电路

本课建立了布尔量、真值表、基本门、代数律、德摩根与最小项标准形,并把业务判定翻译成可验收的表达式。下一课 H4 会把这些门搭成加法器、比较器、多路选择器等组合电路,讨论延迟级数与进位链;本课不提前展开触发器与时钟。自测建议:默写与/或/异或真值表共 12 行;用德摩根展开 ¬(A∧¬B);把「A 与 B 不同」写成最小项或式;指出 1 处自然语言「或」可能产生的歧义;用吸收律化简 A∨(A∧B) 并解释业务含义。通过后再进入 H4。

下一课转向 H4 组合逻辑电路:把本章验收过的结论带进后续主题,写成可检查的方案约束。

同阶段相关课

AI 答疑

默认关闭。启用后,只发送本课标题、最近阅读的屏幕内正文摘录(最多 6000 字)与本次问题。

配置自己的服务