Skip to content

模拟信号经过滤波、放大,最终要变成 0 和 1 才能进计算机——而 0 和 1 的所有运算,底层都是逻辑门。这篇讲六大基本逻辑门、真值表、德摩根定律,以及它们和编程位运算的一一对应(你其实天天在用)。

文中真值表、德摩根定律、半加器用 Python 程序验证(9 项 PASS),不是纸面推导。

一、为什么程序员要懂逻辑门

你可能天天写 a & ba | ba ^ b~a——这就是位运算。而位运算在硬件上就是逻辑门:CPU 里几十亿个晶体管,组合起来就是一堆与门、或门、非门。搞懂逻辑门 = 搞懂你写的位运算在硅片上发生了什么。

二、六大基本逻辑门

六大基本逻辑门

符号(电路/编程)真值表一句话
与 AND&全 1 才 1两个条件都满足
或 OR|有 1 就 1任一条件满足
非 NOT~1↔0 翻转取反
异或 XOR^相同 0,不同 1相异才 1(减法/校验用)
与非 NAND~(A&B)与的取反全 1 才 0
或非 NOR~(A|B)或的取反有 1 就 0

关键点:

  • NAND/NOR 是"万能门"——任何逻辑电路都能只用 NAND(或只用 NOR)搭出来。历史上 7400 系列芯片就靠 NAND 打天下
  • XOR 是"比较器"a^b == 0 就是判断 a、b 相等;奇偶校验就是全部位 XOR
  • 真值表是逻辑门的"行为规范",任何输入组合 → 唯一输出

三、布尔代数:逻辑门的运算法则

逻辑门服从一套代数规则——布尔代数。最重要的两条:

德摩根定律:
  (A·B)' = A' + B'       与的取反 = 各取反的或
  (A+B)' = A' · B'       或的取反 = 各取反的与

程序员的直觉版本!(a && b) == (!a) || (!b)!(a || b) == (!a) && (!b)——写代码判空时经常用到(比如"不是(在A且不在B)"改写)。Python 验证:

python
for a, b in [(0,0),(0,1),(1,0),(1,1)]:
    assert (0 if (a & b) else 1) == ((1^a) | (1^b))   # (A·B)' = A'+B'
    assert (0 if (a | b) else 1) == ((1^a) & (1^b))   # (A+B)' = A'·B'
# 9 项 PASS(6 真值表 + 德摩根 + 半加器)

其他常用定律:交换律、结合律、分配律、吸收律(A + A·B = A)——和代数很像,但不完全一样(比如 A + A' = 1、A·A' = 0)。

四、逻辑门搭出加法器:半加器

逻辑门不是玩具——CPU 的加法器就是这么搭出来的。1 位半加器只要两个门:

和 S   = A XOR B     (1+1=0 进 1,异或正好)
进位 C = A AND B     (只有 1+1 才进位)

Python 验证:

0 + 0 = 和0 进位0    0 + 1 = 和1 进位0
1 + 0 = 和1 进位0    1 + 1 = 和0 进位1   ← 1+1=2(二进制 10)

两个半加器 + 一个或门 = 全加器(带进位输入),串联 32 个全加器 = 32 位加法器——你的电脑就是这么加法的

五、逻辑门 → 触发器 → 记忆

逻辑门只能"算"不能"记"(输出完全由当前输入决定,是无状态电路)。要记忆,需要触发器(Flip-Flop):两个门交叉反馈,就能"锁存"一位状态——这是寄存器、SRAM、CPU 状态机的基础(下一篇展开)。

小结

  • 六大逻辑门:AND/OR/NOT/XOR/NAND/NOR——和编程位运算 & | ~ ^ 一一对应
  • 德摩根定律:(A·B)' = A'+B'(A+B)' = A'·B'——写代码判空、硬件化简都在用
  • 半加器 = XOR + AND:1 位加法的最小实现,级联成 CPU 加法器
  • 逻辑门无状态,触发器才有记忆——下一步《触发器与时序逻辑》(整理中)
  • 硬件链路:《模拟电路》把模拟信号变成干净的 0/1 → 数字电路在这里做运算 → 《嵌入式》(STM32 的 CPU 里全是这些门)