A4 逻辑门
继电器能收发电报——但它还能干一件更厉害的事:组成逻辑。
你和发小用继电器搓出了自动转发的电报系统,正得意呢。这天晚上,你盯着那些继电器发呆,脑子里冒出一个念头:继电器本质上是"开关的开关"——用电来控制一个开关。那如果我把好几个继电器按不同方式接在一起,会发生什么?
你翻出了电池、灯泡和一堆开关,开始动手试。这一试,把一条通往计算机的路给试了出来。
先认识三个词:并且、或者、不是
假设你想养一只猫,但是有这些要求:
- "我要一只公的,并且绝育的猫"—— 公的和绝育这两个条件同时满足才算。
- "我要白色的,或者棕色的"——这三个颜色任一满足就行。
- "我要不是白色的"——反过来,除了白色都可以。
这三个词——并且 / 或者 / 不是——就是逻辑的三块积木。一百多年前,一个叫乔治·布尔的英国人把它们变成了数学符号:并且写作 AND,或者写作 OR,不是写作 NOT。(他想用数学来算逻辑,甚至用这套方法证明了"苏格拉底必有一死"——不过那是另一段故事了。)
先看终局:挑猫器长什么样
在动手分解每个门之前,先让你看看我们最终要做出的东西——一台挑猫机器。还记得前面的挑猫条件吗?把每个"并且"换成 AND 门、每个"或者"换成 OR 门、每个"不是"换成 NOT 门,整个条件就变成了一串布尔表达式:
(M AND N AND (W OR T)) OR (F AND N AND (NOT W)) OR B 下面这个互动器让你先用 0/1 模拟这台机器——拨动开关代表一只猫的属性,看三个条件分别算出什么、最终灯亮不亮。试着拨 F=1、N=1(其余为 0,代表灰色绝育母猫):
M·N·(W+T) 0 F·N·(¬W) 0 B 0 一个门一个门地认识
你拿起开关开始试。下面每一种门都是真的能动的——点 A、B 开关(ON=1,OFF=0),看灯亮不亮,对照右边的真值表。门有约 100ms 延迟,你能看到电流"流"过去。每个门下面还标了它在挑猫器里的对应角色。
门 1 AND 与门
把两个开关一前一后串起来。只有左边而且右边都合上,灯才亮——这就是"与"。串联 = AND。
只有 A=1 且 B=1 时,输出才是 1。其余三种情况全灭。
💡 挑猫器里 M·N(公并且绝育)就是这个门
门 2 OR 或门
把两个开关并排接在一起。只要左边或者右边任一个合上,灯就亮——这就是"或"。并联 = OR。
只要 A=1 或 B=1(含两个都 1),输出就是 1。只有两个都 0 才灭。
💡 挑猫器里 W+T(白或者棕)就是这个门
门 3 NOT 非门
用上一章的继电器,让它反过来——通电时灯灭,断电时灯亮。堪称最早的"吃葡萄不吐葡萄皮",所以也叫反相器。
输入 0 输出 1,输入 1 输出 0。永远唱反调。
💡 挑猫器里 ¬W(不是白色)就是这个门
门 4 NAND 与非门
在 AND 后面接一个 NOT,就是 NAND(与非)。两个都通反而灭——和与门正好相反。别小看它,它是通用门。
AND 的反面:只有 A=1 且 B=1 时输出 0,其余全是 1。
门 5 NOR 或非门
在 OR 后面接一个 NOT,就是 NOR(或非)。任一通就灭——和或门正好相反。它也是通用门。
OR 的反面:只有全部为 0 时才输出 1,其余全是 0。
门 6 XOR 异或门
"异或"——两个输入不同时才亮,相同时灭。它很特别,下一章你会看到它恰好是加法器的关键。
A 和 B 不同时输出 1,相同时输出 0。1⊕1=0(进位了!)。
德摩根定律:门可以互换
你搭了这么多门,可能觉得种类太多不好记。但有个叫德摩根的人发现了一条神奇的规律:
NOT (A AND B) = (NOT A) OR (NOT B)
NOT (A OR B) = (NOT A) AND (NOT B)
翻译成人话:"并非既 A 又 B"等价于"A 不成立,或者 B 不成立","并非 A 或 B"等价于" A 不成立,而且 B 不成立"。这意味着——你可以用一种门替代另一种,逻辑完全一样。
综合挑战:用逻辑门搭一台"挑猫机器"
现在你手里有了全部六种门,是时候动真格了。你准备真正为自己挑选一只猫?
"我要一只公的、绝育的、白色或棕色的;
或者一只母的、绝育的、不是白色的;
或者——只要是黑色的,我全要。"
把每个"并且"换成 AND 门,每个"或者"换成 OR 门,每个"不是"换成 NOT 门——整个条件就变成了一张电路图。这就是挑猫机器:
(M AND N AND (W OR T)) OR (F AND N AND (NOT W)) OR B 下面这张图就是上面那串布尔表达式的电路实现——7 个门用导线连起来,拨开关代表一只猫的属性,灯亮就代表合格。每个开关上都标了它代表的属性(M 公 / N 绝育 …),点它切换 ON/OFF:
挑猫机器:点左边的开关切换 ON/OFF,灯亮 = 这只猫合格。试试只拨 F 和 N(灰母·绝育·非白)
把 F 和 N 拨成 1(其余保持 0),代表"灰色绝育母猫"。你会看到电流流过 NOT 门(W=0 所以 ¬W=1)、再流进 AND 门(F·N 满足)、一路传到最后的 OR 门——灯亮了,电路自己判断出这只猫合格。
你刚才亲眼看到的,是一件了不起的事:一段用自然语言描述的条件,被"编译"成了硬件电路。电流自己就把判断做完了。这正是计算机"理解"指令的雏形——而它全靠这些小小的逻辑门。
逻辑门能挑猫——那它能做加法吗?
你用逻辑门搭出了会判断的电路。但只会判断还不够,计算机还得会算。逻辑门能做加法吗?比如,能不能让它算出 1 + 1 = 10?
回头看看刚才那个 XOR 门的真值表:1⊕0=1,0⊕1=1,1⊕1=0。再看看 AND 门:1·1=1。把两张表叠在一起——你会发现,XOR 正好是加法的"本位",AND 正好是加法的"进位"。下一章,你会用这两个门,搓出第一台加法器。
小结 & 思考题(点开深入)
本章你经历了什么
- 认识了逻辑的三块积木:并且(AND)、或者(OR)、不是(NOT)
- 亲手试了 6 种门——串联=AND、并联=OR、继电器反接=NOT
- 了解了德摩根定律:门可以互相替代,NAND/NOR 是通用门
- 把挑猫条件编译成 7 门电路,拨开关就让电路自动判猫
- 埋下伏笔:XOR 是加法的本位,AND 是进位——下一章做加法器
思考题
回到上面的挑猫电路,依次代入这三只猫(拨对应的开关),预测灯亮不亮,然后验证:(a) 棕色未绝育公猫 (b) 白色绝育母猫 (c) 灰色绝育母猫。哪些合格?
(b) F=1,N=1,W=1 → 条件②需要 ¬W,但 W=1 所以 ¬W=0,不满足;其余也不满足。结果 0,不合格。
(c) F=1,N=1,W=0 → 条件② F·N·(¬W) = 1·1·1 = 1,合格!灯亮。这是最可爱的那只。
NAND 是通用门,只用它就能搭出所有门。试试:怎么用一个 NAND 门搭出 NOT?提示——把两个输入接在一起会怎样?
下一章讲加法器。在二进制里 1+1 不等于 2,而等于 10(读"一零")。结合本章的 XOR 和 AND 真值表想想:两个 1 位相加,"本位"和"进位"分别对应哪个门?