早上七点,保安老周在花园小区门口向新同事交代规则:南门要“刷脸成功 并且 刷卡成功”才开门;北门宽松些,“刷脸 或者 刷卡任一通过”就放行;地下车库的门白天锁着、晚上才开,正好和常理相反;旋转闸机更特别,一次只容一人通过,两个人挤着进反而卡死。老周讲完,从兜里掏出一个破旧的小本本,上面密密麻麻记着这些规则。他想了想,又拿出一支笔,把“成功”画成 1,“失败”画成 0,然后在旁边写下几个符号。 老周可能不知道,他做的这件事,和一百多年前一位叫乔治·布尔的数学家做的事情几乎一模一样:把生活中的“如果、并且、或者、不”翻译成数学符号。这套翻译结果,就是布尔代数;而实现这些翻译规则的“小盒子”,就是逻辑门。今天你手机里的芯片,本质上是一栋巨大到不可思议的“门禁大楼”,里面住着上百亿个这样的小盒子。如果你想从事 AI 相关工作、理解 GPU 或 TPU 的底层原理,或者想搞懂模型推理时硬件的运行方式,看懂这四种最基本的门,就是拿到了整栋大楼的钥匙串。

岗位关联

布尔代数与逻辑门是数字世界的语法基础,理解与/或/非/异或四种基本运算,能让你读懂硬件数据手册、理解芯片功耗与逻辑设计,是 AI 工程师跨越软件与硬件鸿沟的第一级台阶。

目录
  1. 可视化演示
  2. 1. 布尔代数源流:从门禁到数学
  3. 2. 与门运算基础:两把钥匙同时到位
  4. 3. 或门运算基础:任一条件即放行
  5. 4. 非门运算基础:一切反着来
  6. 5. 异或门运算:一次只进一人
  7. 6. 德摩根定律:规则的“反着读”
  8. 7. 逻辑函数实现:用门搭积木
  9. 8. 组合电路设计:半加器实战
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

展示系统处理流水线、实时性能指标曲线及多方案对比分析,包含数据流转、吞吐延迟监控与方案评估。

本节配有交互动效(进入视口后自动加载,约 3KB)。

系统可视化 处理流程:输入→处理→模型→输出 性能监控:实时指标 P=L×T

1. 布尔代数源流:从门禁到数学

老周把“成功/失败”画成 1/0,把“并且”写成 ·,把“或者”写成 +,把“不”写成头顶一横。他意识到,任何一句门禁规则都能变成一串只有 0 和 1 的算术式——这就是逻辑数学化的起点。

1854 年,英国数学家乔治·布尔发表《思维定律的研究》,第一次系统地用代数方法处理逻辑推理。他提出一个大胆的想法:命题只有真、假两种取值,而逻辑推理可以像解方程一样进行运算。

在布尔代数中,用变量 A 代表一个命题,A 只能取 0 或 1;头顶横线表示“不成立”;A·B 表示“A 成立且 B 成立”;A + B 表示“A 成立或 B 成立”。这些运算与普通算术很相似,但规则并不完全一样,例如 A + A 仍然等于 A。下面这个式子精确表达了“取反”的代数含义:

老周的小本本上,最后只剩几行算式。外人看着像天书,但任何一台计算机读起来都毫不费力——因为计算机天生只懂 0 和 1,而布尔代数就是写给 0 和 1 的语法书。

A‾=1−A,A∈{0,1}\displaystyle \overline{A} = 1 - A, \quad A \in \{0, 1\}
通俗理解:把“真”当成 1、“假”当成 0,那么“不真”就是 0 减出来的 1,“不假”就是 1 减出来的 0。这就是逻辑被翻译成数学的第一个瞬间。
  1. 符号 AA 是一个命题变量,代表“某条件成立”,取值只能是 0 或 1。
    AA
  2. 头顶横线横线表示取反操作,把真变假、假变真,是非门功能的代数化身。
    A‾\overline{A}
  3. 表达式 1 - A当 A = 1 时结果为 0,当 A = 0 时结果为 1,恰好完成取反。
    1−A1 - A
  4. 取值约束A 被限制在 0 和 1 两个值中,这正是数字电路二值世界的数学根基。
    A∈{0,1}A \in \{0, 1\}

2. 与门运算基础:两把钥匙同时到位

南门的规则是“刷脸成功”并且“刷卡成功”才开门。两个条件缺一不可,老周管这叫“两把钥匙都得插到位”。如果只满足其中一个,门纹丝不动。

把这种“同时成立”的逻辑做成一个电子小盒子,就是与门(AND gate)。它是数字电路中最基本的积木之一,无数复杂功能都由它组合而来。

与门接收两个输入 A、B,输出 Y。约定成功 = 1、失败 = 0,那么只有 A 和 B 同时为 1 时 Y 才为 1,其余三种组合输出都是 0。把所有输入组合和对应输出列成一张表,就是真值表。电路上可以把与门想象成两个开关串联的灯泡电路:两个开关都闭合,灯才亮。它的电路符号像一个"D"形闸门,左侧是输入端,右侧是输出端。

南门的保安只看“两个条件是否同时为真”,与门在芯片里也是如此——一个判定,毫不含糊。

Y=A⋅B\displaystyle Y = A \cdot B
通俗理解:A·B 就像两个串联的开关,只有两个开关都合上(都为 1),灯(Y)才亮;只要有一个开关断开,灯就灭。
  1. 输入变量 AA 代表第一个条件是否成立,取值只有 0 或 1。
    AA
  2. 点乘符号布尔乘法中的点号表示“并且”关系,与算术乘号形状相同但含义不同。
    ⋅\cdot
  3. 输入变量 BB 代表第二个条件是否成立,取值同样只有 0 或 1。
    BB
  4. 输出变量 YY 是运算结果,仅在“同时成立”时输出 1,其余情况输出 0。
    Y=A⋅BY = A \cdot B

3. 或门运算基础:任一条件即放行

北门明显宽松:刷脸或者刷卡,只要有一个成功就放行。老周在规则本上写下一个“或”字,然后改成数学符号 +,心里想:这门比南门好进多了。

这就是“或”逻辑,电路中的或门(OR gate)专门实现它。或门同样接收两个输入 A、B,输出 Y。除了两个输入都为 0 时输出 0 以外,其余三种组合输出都是 1。

用并联开关电路可以直观类比:两个开关并联在灯泡回路中,任一开关闭合,灯就亮。或门的电路符号是尾部带弧的盾形,输入端一侧微微凹陷。需要注意,这里的“+“不是算术加号,在布尔代数里 1 + 1 的结果是 1 而不是 2——它只回答”有没有至少一个成立”,并不负责计数。

北门“一个条件过就过”,对应逻辑上就是“至少一个为真即输出 1”。它比南门宽松,但边界同样清晰。

Y=A+B\displaystyle Y = A + B
通俗理解:A + B 像两个并联的开关,任一开关合上灯就亮;只有两个都断开(都为 0),灯才灭。
  1. 输入变量 AA 表示第一个条件,0 表示不成立、1 表示成立。
    AA
  2. 加号 +布尔加法中的加号表示“或者”关系,表示只要有一个成立即可。
    ++
  3. 输入变量 BB 表示第二个条件,取值与 A 相同。
    BB
  4. 输出变量 YY 在所有输入中有任何 1 时就输出 1,只有全 0 才输出 0。
    Y=A+BY = A + B

4. 非门运算基础:一切反着来

地下车库的门很特别:白天总是锁着,晚上才开。老周说,这扇门的规则是“和常理反着来”——白天大家觉得该开,它偏锁;晚上没人,它反倒开了。

逻辑上的“取反”由非门(NOT gate)实现,也叫反相器。非门只有一个输入 A、一个输出 Y,输入什么就反着什么:输入 0 输出 1,输入 1 输出 0。

非门的作用是“反转”而不是“消灭”,信号仍然存在,只是电平翻转了。它的电路符号是一个三角形加输出端一个小圆圈,那个小圆圈表示取反。“反相器”这个别名也来源于此:把高电平变低电平、低电平变高电平。在数字电路中,非门常被用来生成某个信号的相反版本,比如“忙”与“闲”两种状态。

地下车库门像一个“反着读”的过滤器。多个非门串联就是偶数次取反,老周偶尔还玩这种“负负得正”的游戏。

Y=A‾\displaystyle Y = \overline{A}
通俗理解:非门就像一面“逻辑哈哈镜”,进来的 0 变成 1,进来的 1 变成 0,永远说反话。
  1. 输入变量 AA 是唯一输入,取 0 或 1。
    AA
  2. 取反横线横线表示对 A 取反,这是非门的代数记号。
    A‾\overline{A}
  3. 输出变量 YY 完全由 A 的反值决定,A 为 0 时 Y 为 1,A 为 1 时 Y 为 0。
    Y=A‾Y = \overline{A}

5. 异或门运算:一次只进一人

旋转闸机最特殊:一次只容一人通过,两个人同时挤上来反而卡住。老周说这叫“二选一”。刷脸和刷卡都成功也没用,闸机只认“当前只有一个人”。

逻辑上,这种“互斥的二选一”就是异或(XOR)。异或门接收两个输入 A、B:当 A、B 相同时输出 0,不同时输出 1。它可以用与、或、非三种门组合出来:A 成立且 B 不成立,或者 A 不成立且 B 成立,两种情况任一出现,输出就是 1。

异或门的电路符号是在或门的基础上多画一条输入弧线,并在输出端加一个小圆圈。展开式揭示了它与基本门的关系:

闸机每次放行一个人,异或门判定的正是“两个输入必须不一样”。这种互斥判断,在 AI 服务的 A/B 分组里也常碰到。

Y=A⊕B=A⋅B‾+A‾⋅B\displaystyle Y = A \oplus B = A \cdot \overline{B} + \overline{A} \cdot B
通俗理解:异或就是“两个条件必须不一样才放行”。A 和 B 一个为 1、一个为 0 时输出 1;两个都是 1 或都是 0 时输出 0。
  1. 符号 ⊕异或专属记号,读作“异或”,表示互斥的二选一。
    ⊕\oplus
  2. 乘积项 A·\overline{B}A 成立且 B 不成立,这是第一种“放行”情况。
    A⋅B‾A \cdot \overline{B}
  3. 乘积项 \overline{A}·BA 不成立且 B 成立,这是第二种“放行”情况。
    A‾⋅B\overline{A} \cdot B
  4. 加号连接两种情况任一发生,Y 就输出 1;两者都不发生时输出 0。
    A⋅B‾+A‾⋅BA \cdot \overline{B} + \overline{A} \cdot B

6. 德摩根定律:规则的“反着读”

老周后来发现一个偷懒技巧:与其死记“什么情况下放行”,不如想清楚“什么情况下不放行”。规则反着读,往往更简单,也更不容易出错。

这个技巧在布尔代数里叫德摩根定律,是逻辑等价变换中最著名的定理。它告诉我们:对“与”取反,等于各自取反后再“或”;对“或”取反,等于各自取反后再“与”。第一条表述为:

它的对偶形式是:对(A 或 B)整体取反,等价于对 A 取反后再与对 B 取反,即“或的取反等于非的与”。老周照着这条定律重新布了南门告警线:只要刷卡失败或者人脸失败任一发生就报警,比原来的电路少用一个门。

A⋅B‾=A‾+B‾\displaystyle \overline{A \cdot B} = \overline{A} + \overline{B}
通俗理解:“不满足(刷卡且人脸)” 等价于 “刷卡失败 或 人脸失败”。只要有一个条件失效,告警就应该响起,这比同时盯住两个条件再取反更直观。
  1. 左边整体取反先算出 A 和 B 的“与”结果,再整体取反,表示“两个条件同时成立”这件事不成立。
    A⋅B‾\overline{A \cdot B}
  2. 右边非的或右边表示 A 不成立或 B 不成立,两个条件中至少有一个出了问题。
    A‾+B‾\overline{A} + \overline{B}
  3. 等号含义等号表示左右两个式子在 A、B 的全部四种取值下输出都相同,称为逻辑等价。
    ==
  4. 应用方向既可以从左往右拆开化简电路,也可以从右往左合并减少门数。
    A⋅B‾=A‾+B‾\overline{A \cdot B} = \overline{A} + \overline{B}

7. 逻辑函数实现:用门搭积木

门禁系统要应对各种新规则,但老周手上的模块只有与、或、非几种。他发现,无论规则多复杂,都可以用这些模块拼出来——就像小孩用几种基础积木搭出城堡。

这正是组合逻辑的核心思想:任何逻辑函数都可以用基本门组合实现。最万能的方法是写成“与或式”(也称最小项之和):先用非门把需要取反的输入处理一下,再用与门构造各个条件组,最后用或门把条件组连接起来。

例如,对于规则“高级会员刷卡通过,或者普通会员在非高峰时段通过”,可以写成逻辑表达式:

更进一步,与非门和或非门各自都是“万能门”:把与非门两个输入端并接就得到非门,两个与非门级联就得到与门,再利用德摩根定律还能拼出或门。芯片厂正是这样,用少数几种标准门单元拼出整个 CPU。

Y=A⋅B+A‾⋅C\displaystyle Y = A \cdot B + \overline{A} \cdot C
通俗理解:Y 的值为 1 有两种情况:一是 A 和 B 同时成立,二是 A 不成立但 C 成立。翻译成电路,就是一个与门、一个非门、一个与门、一个或门按顺序搭起来。
  1. 乘积项 A·B第一个与门输出,表示条件组一“A 且 B”。
    A⋅BA \cdot B
  2. 取反输入 \overline{A}非门的输出,把 A 反转后供第二个与门使用。
    A‾\overline{A}
  3. 乘积项 \overline{A}·C第二个与门输出,表示条件组二“非 A 且 C”。
    A‾⋅C\overline{A} \cdot C
  4. 输出 Y或门把两个条件组的结果合并,任一成立则 Y = 1。
    Y=A⋅B+A‾⋅CY = A \cdot B + \overline{A} \cdot C

8. 组合电路设计:半加器实战

老周想装一个“双人计数器”:两个人同时从闸机经过就记一次。但他很快意识到,这其实是在做二进制加法:1 + 1 = 10,要输出“本位”和“进位”两个结果。

这个经典电路叫半加器,是组合电路设计的入门案例。设计流程三步走:先列真值表,把每种输入对应输出写清楚;再根据真值表写出逻辑表达式;最后用门搭建电路。两个一位二进制数相加,求和位 S 和进位位 C 的表达式如下:

多个半加器配合或门可以构成全加器,再把全加器串联起来,就能计算多位二进制数的加法——CPU 计算单元的地基由此而来。老周最终用几个小模块装好了计数器。

S=A⊕B,C=A⋅B\displaystyle S = A \oplus B, \qquad C = A \cdot B
通俗理解:半加器把“和”与“进位”分开处理:和位用异或门判断两数是否不同,进位用与门判断两数是否都是 1。一个元件同时完成两件事。
  1. 和位 SS = A ⊕ B,当两个二进制位不同时本位为 1。
    S=A⊕BS = A \oplus B
  2. 进位位 CC = A · B,只有两个输入都为 1 时才产生进位。
    C=A⋅BC = A \cdot B
  3. 组合关系两个输出互不干扰,由同一组输入同时驱动,这就是“组合电路”的含义。
    S=A⊕B,C=A⋅BS = A \oplus B, \qquad C = A \cdot B

AI 应用场景

场景一:风控规则引擎中的条件组合

阶段:特征工程与规则引擎

解决的问题:传统风控靠人工编写几十条 if-else 硬规则,条件组合一多就难以维护、容易冲突。AI 时代用规则引擎做硬性拦截与特征预处理,引擎底层把每条规则编译成位向量与布尔运算,毫秒级完成百万次判断,再与模型打分结果融合。

具体案例:某支付平台的反欺诈系统有一条经典规则:“命中灰名单 AND 单笔金额大于 5000 元 AND 登录设备为非常用设备” → 直接拒绝。这条规则用与门逻辑聚合三个条件,任一条件不满足就放行给模型继续评分。规则引擎在 GPU 上还会被编译成批量位运算,一次同时对上万笔交易做判断。

场景二:推荐系统 A/B 实验的互斥分流

阶段:模型服务与实验管理

解决的问题:线上推荐系统同时跑多个模型,需要把用户流量互斥地分到不同实验组。传统取模分流容易与缓存分片冲突,而用异或逻辑将用户 ID 哈希后的比特做互斥判断,可以保证一个用户只进入一个实验桶。

具体案例:某推荐团队同时上线三个排序模型,对用户 ID 哈希后做异或校验生成 4 个桶,每个用户只属于一个桶,实验组和对照组的样本互不重叠。异或“相同为 0、不同为 1”的性质,恰好是“互斥”的数学化身。

场景三:AI 芯片验证中的逻辑等价检查

阶段:芯片验证与硬件仿真

解决的问题:AI 芯片(如 NPU)里的乘法累加单元需要大量组合逻辑,验证时要穷举真值表并检查 RTL(寄存器传输级)实现是否与数学规格等价。德摩根定律用于把电路表达式等价变换,帮助验证工具证明两个网表功能一致。

具体案例:某芯片验证工程师检查一个 8 位加法器 IP 时,用半加器-全加器级联模型生成参考输出,再与 RTL 仿真波形比对;遇到实现差异时,用德摩根定律把“与后取反”的写法改写成“取反后或”,最终定位到是负逻辑约定不一致导致的 bug。

Python 演示

python46 行
def and_gate(a, b):    return int(a and b) def or_gate(a, b):    return int(a or b) def not_gate(a):    return int(not a) def xor_gate(a, b):    return int((a or b) and not (a and b)) def truth_table():    print(" A B | AND OR XOR")    print("-----+-----------")    for a in (0, 1):        for b in (0, 1):            and_y = and_gate(a, b)            or_y = or_gate(a, b)            xor_y = xor_gate(a, b)            print(" %d %d |  %d   %d   %d" % (a, b, and_y, or_y, xor_y))    print("\n NOT:")    for a in (0, 1):        print(" A=%d -> Y=%d" % (a, not_gate(a))) def check_demorgan():    for a in (0, 1):        for b in (0, 1):            lhs = not_gate(and_gate(a, b))            rhs = or_gate(not_gate(a), not_gate(b))            assert lhs == rhs, "Demorgan fail at %d,%d" % (a, b)    print("德摩根第一定律验证通过") def half_adder(a, b):    s = xor_gate(a, b)    c = and_gate(a, b)    return s, c if __name__ == "__main__":    truth_table()    check_demorgan()    print("\n 半加器 (S, C):")    for a in (0, 1):        for b in (0, 1):            s, c = half_adder(a, b)            print(" A=%d B=%d -> S=%d C=%d" % (a, b, s, c))
目的:用 Python 复刻四种基本逻辑门,打印真值表,自动验证德摩根定律,并实现半加器。
  1. return int(a and b)把 Python 的布尔值强转成 0/1 整数,让输出更贴近数字电路。
  2. return int((a or b) and not (a and b))按正文的展开式实现异或:本质是“或”减去“同时成立”。
  3. for a in (0, 1)双重循环穷举所有输入组合,相当于手工计算真值表。
  4. assert lhs == rhs用断言让程序自动证明德摩根定律在四种输入下全部成立。
  5. return s, c半加器同时返回和位与进位,对应正文中的两个输出表达式。

常见误区

误区平时说“喝茶或者咖啡”默认只能选一种,所以觉得或门也是二选一:A 或 B,就是要么 A 成立、要么 B 成立,两个都成立反而应该不通过。

正解布尔“或”是“至少一个成立”:1 + 1 = 1,两个都为 1 时输出依然是 1。真正“二选一”的是异或门。就像北门刷脸和刷卡都成功时,门照样开;旋转闸机那种只能过一人的场景才用异或。把或门当二选一,会导致电路设计在“条件重叠”时出现漏判。

为何常见:生活口语的“或者”常常带排他含义,把这种语感直接搬进布尔代数,就产生了误解。

误区看到或门表达式 Y = A + B,就把它和算术加法划等号,算出 1 + 1 = 2,甚至觉得输出应该是一个两位数。

正解布尔代数里的加号只有 0 和 1 两个取值空间,1 + 1 的结果仍是 1;进位概念属于半加器这种算术电路,不是或门的行为。或门只回答“有没有至少一个 1”,并不负责计数。就像问“你有没有孩子”,答案只有有或没有,不会回答“有两个”。

为何常见:符号"+"太有迷惑性,初学者容易先入为主地依赖算术直觉。

误区以为非门能把弱信号变成强信号,像放大器一样,输入一个小电平就能输出一个大电平。

正解非门只做逻辑取反:高变低、低变高,不改变信号承载的信息量,也没有功率增益。实际电路中非门由晶体管构成,确实带有信号整形作用,但它的功能语义是“反转”而不是“放大”。就像地下车库门只是把“禁止”换成“允许”,不会把门缝变大变宽。

为何常见:把物理层面的电平恢复效果与逻辑功能混为一谈。

误区既然与门是“最严格”的门,那把要满足的条件都“与”起来不就能表达任何规则了吗?为什么还需要或门和非门?

正解与门只能表达“同时成立”,无法表达“取反”和“或”。非门的输出是输入的完全反转,只用与门的组合永远给不出这种结果。真正“单种门万能”的是与非门和或非门。就像手里只有“双人同时通过”的闸机,无论怎样排列,都装不出“一次只进一人”的效果。

为何常见:只看到与门“严格”的一面,忽略了逻辑函数需要与、或、非三个基本运算才能完备表达。

面试题

Q1. 二输入与门的输出为 1 的条件是?

单选题 · easy

  • A.两个输入都为 0
  • B.两个输入都为 1← 正确答案
  • C.至少一个输入为 1
  • D.两个输入不相同

答案:B。与门像南门的两把钥匙,必须刷脸和刷卡同时成功才放行。A 和 C 都漏掉了“同时成立”这个关键前提,D 描述的其实是异或的判定条件,因此只有 B 正确。

Q2. 对于或门 Y = A + B,当 A=1、B=1 时,输出 Y 等于?

单选题 · easy

  • A.结果等于 2
  • B.结果等于 1← 正确答案
  • C.结果等于 0
  • D.结果不确定

答案:B。或门回答的是“有没有至少一个为 1”,两个都为 1 时答案依然是 1。布尔加法的 1 + 1 = 1,和算术加法不同,因此 A 是典型错误,C、D 也不符合真值表定义。

Q3. 非门的核心功能是?

单选题 · easy

  • A.放大输入信号
  • B.把输入取反← 正确答案
  • C.延迟输入信号
  • D.把输入变为常量

答案:B。非门像地下车库门,规则“一切反着来”:0 变 1、1 变 0。它只反转不放大、不延迟,也不把信号固定成某个常量,因此 A、C、D 都不是非门的逻辑功能。

Q4. 1 XOR 0 的结果是?

单选题 · mid

  • A.输出为 0
  • B.输出为 1← 正确答案
  • C.值不确定
  • D.与或门相同

答案:B。异或门的规则是“输入不同则输出 1”。1 和 0 不同,所以输出为 1。A 对应输入相同的情况,C 不符合数字电路的确定性,D 混淆了异或门与或门的逻辑行为。

Q5. 关于半加器的输出,下列说法正确的有?

多选题 · mid

  • A.和位 S = A XOR B← 正确答案
  • B.进位 C = A AND B← 正确答案
  • C.和位 S = A OR B
  • D.进位 C = A XOR B

答案:AB。半加器把一位二进制加法的两个结果分开输出:和位用异或门判断两数是否不同,进位用与门判断两数是否都是 1。C 把和位错写成或,D 把进位错写成异或,都不符合真值表。

Q6. 旋转闸机“一次只放行一人”最适合用哪种逻辑门实现?

单选题 · mid

  • A.与门
  • B.或门
  • C.非门
  • D.异或门← 正确答案

答案:D。旋转闸机要求“两人同时挤上来就卡住”,本质是“两个输入信号互斥时通过”,这正是异或门“相同为 0、不同为 1”的特性。与门和或门都会在条件重叠时放行,非门只做取反,都不符合需求。

Q7. 以下等价变形正确的是?

多选题 · mid

  • A.NOT(A OR B) = NOT A AND NOT B← 正确答案
  • B.NOT(A AND B) = NOT A OR NOT B← 正确答案
  • C.NOT(A OR B) = NOT A OR NOT B
  • D.NOT(A AND B) = NOT A AND B

答案:AB。这是德摩根定律的两条形式:“或的取反”等于“各自取反再与”,“与的取反”等于“各自取反再或”。C 少了取反位置的变化,D 的右边两式并不等价,代入 A=1、B=0 即可验证失败。

Q8. 关于逻辑函数实现,下列说法正确的有?

多选题 · hard

  • A.只用与门可实现非门
  • B.与非门并接等效非门← 正确答案
  • C.任意函数可用门组合← 正确答案
  • D.或非门也是通用门← 正确答案

答案:BCD。与非门把两个输入端并接后,输入 0 输出 1、输入 1 输出 0,等效非门;任意逻辑函数都能写成与或式,再用门组合实现;或非门和与非门一样是通用门。A 错误,因为与门无法表达取反,这正是“与门不完备”的体现。

Q9. 将两输入与非门的两个输入端并接后,等效于?

单选题 · hard

  • A.非门← 正确答案
  • B.与门
  • C.或门
  • D.异或门

答案:A。与非门是“先与后非”,两个输入并接后 A = B,与的结果就是 A 本身,再取反就是 NOT A,因此等效非门。B、C、D 都改变了逻辑关系,不符合与非门并接的真值表。

Q10. 用多个与非门实现或门,最少需要几个与非门?

单选题 · extreme

  • A.1 个
  • B.2 个
  • C.3 个← 正确答案
  • D.4 个

答案:C。先用两个与非门分别把 A、B 取反得到 NOT A 和 NOT B,再把这两个结果送进第三个与非门做“先与后非”,正好得到 A OR B。少于 3 个无法同时完成取反和合并,因此 C 正确。