---
schema_version: "library-reader-v1"
source_type: "original_book"
title: "编码 隐匿在计算机软硬件背后的语言"
author: null
edition: null
publisher: null
year: null
isbn: "9787121181184"
library_document_id: "38270854-596f-4a26-8183-db8c968c6020"
source_sha256: "249786274d83909f0bddc34d77f81ed8f0b14d1eac8843c772a37a3ecbfe2cfc"
pdf_physical_page_count: 438
pdf_physical_page_index_base: 0
range_start: 120
range_count: 10
html_url: "https://workshop.closeclaw.top/api/ai/read/38270854-596f-4a26-8183-db8c968c6020?start=120&limit=10"
markdown_url: "https://workshop.closeclaw.top/api/ai/read/38270854-596f-4a26-8183-db8c968c6020.md?start=120&limit=10"
previous_url: "https://workshop.closeclaw.top/api/ai/read/38270854-596f-4a26-8183-db8c968c6020.md?start=110&limit=10"
next_url: "https://workshop.closeclaw.top/api/ai/read/38270854-596f-4a26-8183-db8c968c6020.md?start=130&limit=10"
---

# 编码 隐匿在计算机软硬件背后的语言

> 页码规则：PDF_PHYSICAL_PAGE_INDEX 是从 0 开始的权威文件物理页索引；PRINTED_PAGE 是页面中识别出的印刷页码，可能为空，二者不得混用。

## PDF_PHYSICAL_PAGE_INDEX=120 | PRINTED_PAGE=104

如果上面的开关闭合或者下面的开关闭合或者都闭合，灯泡都会亮。这里的关键词为“或”。

电路又一次做了一个逻辑上的演示。灯泡回答了“是否有开关闭合？”的问题。下表总结了这样一个电路的工作原理。

同样用0来表示开关断开或者灯泡不亮，用1表示开关闭合或灯泡亮，这个表可以写为如下形式。

同样的，两个开关可以调换，因此上表也可以写为如下形式。

你可能已经猜到了，这与布尔代数中的OR是一样的。

这就是说，两个开关并联相当于布尔代数中的OR运算。

最初当你走进宠物商店的时候，告诉店员：“我想要一只公猫，已绝育的，白色或褐色都可以；或者一只母猫，已绝育的，除了白色任何颜色都可以；或者一只黑猫。”店员会得出以下表达式：

编码隐匿在计算机软硬件背后的语言

104

## PDF_PHYSICAL_PAGE_INDEX=121 | PRINTED_PAGE=105

$$
( M \times N \times ( W + T ) ) + ( F \times N \times ( 1 - W ) ) + B
$$

既然你知道两个开关串联表示逻辑AND（用符号“×”表示)；两个开关并联表示逻辑OR（用符号“+”表示)，因此你可以将8个开关做如下连接。

此电路中的每个开关都用一个字母来标记—与在布尔表达式中所用的字母一样(W表示NOTW，它是1-W的另一种表示方式)。如果按照从左到右、从上到下的顺序遍历电路图，你就会以同样次序遇到出现在表达式中的字母。在表达式中每个符号“×”对应电路中的两个开关（或者两组开关）串联的点。在表达式中每个符号“+”对应电路中两个开关（或两组开关）并联的位置。

与之前一样，店员首先拿出了一只未绝育的褐色公猫。闭合相应的开关，如下图所示。

尽管开关M、T和W闭合了，但是没有成功地点亮灯泡。接着，店员又拿出了一只已绝育的白色母猫。

10 逻辑与开关

105

## PDF_PHYSICAL_PAGE_INDEX=122 | PRINTED_PAGE=106

相应的开关闭合后依然没有点亮灯泡。但是，最后店员拿出了一只已绝育的灰色母猫。

这次，灯泡被成功点亮了，表明这只猫符合你的全部要求。

乔治·布尔并没有连接这样一个电路。他没有兴趣去观察布尔表达式在开关、线路和灯泡中如何实现。当然，这其中存在的一个障碍就是，布尔死后15年人类才发明了白炽灯。但是塞缪尔·莫尔斯在1844年论证了他的电报机是可行的—早于布尔发表《思维规律的研究》10年—将电报发声器替换成上述电路中的灯泡本应该是非常简单的。

然而，在19世纪，没有人将布尔代数中的AND和OR同线路中的开关串联及并联关联到一起。没有这样的数学家，没有这样的电学家，没有这样的电报员，没有这样的人。甚至计算机革命的偶像式人物查尔斯·巴贝奇（1792-1871）也没有，他与布尔处在同一时代并且了解布尔的工作，巴贝奇奋斗了一生，他最先设计了差分机（DifferenceEngine）和分析引擎(Analytic Engine)，这些在一个世纪之后都被看做是现代计算机的前身。本来有些东西可以帮到巴贝奇的，那是什么呢？我们现在知道，那就是根据一台电报器来创建计算机，而非使用齿轮和杠杆来实现计算。

编码—隐匿在计算机软硬件背后的语言

106

## PDF_PHYSICAL_PAGE_INDEX=123 | PRINTED_PAGE=107

是的，就是电报器。

10 逻辑与开关

107

## PDF_PHYSICAL_PAGE_INDEX=124 | PRINTED_PAGE=NOT_DETECTED

在遥远的未来，关于20世纪的早期计算机史早已成为人们印象中模糊的记忆，那时很可能有些人会认为“1ogicgates”（逻辑门）装置是以著名的微软公司创始人的名字来命名的。其实不然。就像我们所看到的一样，逻辑门与普通的让水通过或者让人通过的门是非常类似的。在逻辑学中，逻辑门的工作方式非常简单——让电流通过或阻止电流通过。

在上一章中，你走进了一家宠物店，并且说：“我想要一只公猫，已绝育的，白色或褐色都可以；或者一只母猫，已绝育的，除了白色任何颜色都可以；或者，只要是一只黑猫就行。”这句话被总结为如下布尔表达式：

$$
( M \times N \times ( W + T ) ) + ( F \times N \times ( 1 - W ) ) + B
$$

同样也可以用这样一个由开关和灯泡组成的电路来表示，如下图所示。

1 Bill Gates 中的 Gates 在英文中有“门”的意思—译者注

## PDF_PHYSICAL_PAGE_INDEX=125 | PRINTED_PAGE=109

这样的电路有时被称为网络(network)，而如今这个词更多地被用来描述计算机之间的连接，而不仅指多个开关的集合。

尽管这个电路中的所有元件早在19世纪就都已经被发明出来了，但在那个时代，没有人意识到布尔表达式可以在电路中实现。这个等价关系直到20世纪30年代才被发现。主要贡献人是克洛德·艾尔伍德·香农（生于1916）。1938年，香农在麻省理工学院完成了那篇题为《继电器和开关电路的符号分析》(A Symbolic Analysis of Relay andSwitchingCircuits）的著名硕士论文，在文中阐述了这个问题（10年之后，他又发表了论文“通信的数学原理”，即 The Mathematical Theory of Communication，这是第一篇使用“bit”这个词来表示二进制数字的文章）。

1938年以前，人们已经知道，当两个开关串联的时候，要同时闭合它们，电流才能通过；当两个开关并联的时候，闭合其中任何一个都可以使电路连通。但是没有人像香农那样能清晰严谨地阐述：电子工程师可以运用布尔代数的所有工具去设计开关电路。此外，如果你简化了一个描述网络的布尔表达式，那么你也可以简化相应的网络。

例如，你想要的猫可以用下列表达式描述：

$$
( M \times N \times ( W + T ) ) + ( F \times N \times ( 1 - W ) ) + B
$$

利用结合律，我们可以重新排列由AND(×)连接的变量，并将表达式写为如下形式：

$$
( N \times M \times ( W + T ) ) + ( N \times F { \times } ( \mathbb { 1 } { - } W ) ) + B
$$

为了讲清楚这里是如何变换的，我将定义两个新的符号，X和 $\pmb { Y } ;$

1 T

109

## PDF_PHYSICAL_PAGE_INDEX=126 | PRINTED_PAGE=110

$$
\pmb { X } ^ { = } \pmb { M } \times \left( \pmb { W } + \pmb { T } \right)
$$

$$
\pmb { Y } { = } \pmb { F } \times ( \pmb { I } - \pmb { W } )
$$

现在，描述你想要的小猫的表达式可以写为：

$$
( N \times X ) + ( N \times Y ) + B
$$

化简后，我们可以将X和Y表达式代回去。

注意，变量N在表达式中出现了两次。利用分配率，表达式可以写为只有一个N的形式：

$$
( \pmb { N } \times ( \pmb { X } + \pmb { Y } ) ) + \pmb { B }
$$

现在将X和Y的表达式带入：

$$
( N \times ( ( M \times ( W + T ) ) + ( F \times ( 1 - W ) ) ) ) + B
$$

由于括号太多，这个表达式看起来并不简单。但是这个表达式中少了一个变量，也就意味着在网络中少了一个开关。以下就是简化后的电路图。

确实，证明修改前后的两个电路功能等价要比去证明两个表达式功能相同简单许多。

事实上，网络中仍然有三个开关是多余的。理论上讲，你只需要四个开关来定义你心目中的猫咪即可。这是为什么呢？每个开关都是一个二进制数。你可以设定一个开关代表猫的性别（开关断开表示是公的，而闭合表示是母的)，另一个开关闭合表示猫是否有生育能力（开关断开表示未绝育，而闭合则表示已绝育）。另两个开关用来表示猫的颜色。这里有四种可能出现的颜色（白色、黑色、褐色和其他颜色)，而我们知道，四种选择可以用两个二进制位来定义，于是你需要的就是两个颜色开关。例如，两个开关同时断开表示白色，一个闭合表示黑色，另一个闭合表示褐色，同时闭合表示其他颜色。

编码—隐匿在计算机软硬件背后的语言

110

## PDF_PHYSICAL_PAGE_INDEX=127 | PRINTED_PAGE=111

现在让我们制作一个用来选猫咪的控制面板。这个控制面板上只有四个开关（与你家墙上控制灯开闭的开关很相似)，此外面板上还安装了一个灯泡，如下图所示。

开关打到上面是指开关闭合，反之是指开关断开。或许用来表示猫咪颜色的两个开关标记有点难于理解，这是为了将面板做得简洁而不得已导致的一个小缺憾。在表示颜色的两个开关中，左边的叫做B，意思是说只要它闭合（如上图所示）就表示黑色。两个开关中右边的那个叫做T，意思是说只要它闭合的时候就表示褐色。如果两个开关都闭合则表示其他颜色，这个选择叫做O。两个开关都断开的时候表示白色，用W表示，字母写在下部。

在计算机术语中，开关是一种输入设备（input device)，输入是控制电路如何工作的信息。在本例中，输入开关对应于4个二进制数信息，这些信息用来描述一只猫。输出设备（output device）就是灯泡。如果开关描述了一只符合标准的猫，灯泡就会亮。比如上面控制面板所示的开关就表示了一只未绝育的黑色母猫。这只猫符合你的标准，因此灯泡是亮的。

现在我们要做的就是设计一个电路来控制这个面板工作。

前面提到，香农的论文题目是《继电器与开关电路的符号分析》。这里的继电器与之前我们在第6章提到的电报系统中的继电器很类似。然而在香农发表论文的时候，继电器已经被广泛地用于其他领域，特别是在庞大的电话系统网络中。

继电器像开关一样，可以串联或并联在电路中执行简单的逻辑任务。这种继电器的组合叫做逻辑门(logicgates)。这里提到的逻辑门执行“简单”逻辑任务是指逻辑门只完成最基本的功能。继电器优于开关之处就在于，继电器可以被其他继电器所控制，而不必由人工控制。这就意味着，这些简单的逻辑门组合起来可以实现更复杂的功能，例如一些简单的算术操作。事实上，下一章中，我们就将介绍如何利用电线、开关、灯泡、电池和电报继电器来制作一个加法器（尽管它只能用于二进制数计算）。

11门

111

## PDF_PHYSICAL_PAGE_INDEX=128 | PRINTED_PAGE=112

前面提到过，继电器对于电报系统的工作而言是至关重要的。在长距离情况下，连接电报站的电线具有很高的电阻。这就需要采取一些措施来接收微弱信号并把它增强后再发射出去。继电器就是通过电磁铁控制开关来实现这一目的的。实际上，继电器是通过放大微弱信号来生成强信号的。

就我们的目的而言，我们对于继电器放大微弱信号的功能并不感兴趣。我们真正感兴趣的是继电器可以作为一个电流控制而非人工控制的开关。我们可以将继电器、开关、灯泡和两节电池按照下图连接。

注意，左边的开关是断开的，灯泡没有发光。当闭合开关的时候，左端电池产生电流流过缠在铁芯上的圆线圈。于是铁芯产生了磁性，将上面的弹性金属簧片拉下，使回路接通，灯泡发光。

编码隐匿在计算机软硬件背后的语言

112

## PDF_PHYSICAL_PAGE_INDEX=129 | PRINTED_PAGE=113

当电磁铁将金属簧片拉下来时，我们称继电器被“触发”（triggered)。当左边的开关断开的时候，铁芯的磁性消失，金属簧片回到原位。

这看起来似乎是一种间接控制灯泡发光的方法，而实际上它就是这样的。如果我们只关心点亮开关，完全可以将继电器省略掉，但我们所关心的并不仅仅是点亮灯泡。我们还有更宏大的目标。

在这一章中，（在逻辑门建立之前）我们将多次运用继电器，因此就需要将上面那幅电路图简化。我们可以利用接地的方式减少一些电线。在这种情况下，大地仅代表了一个公共端，并不是真正意义上的物理接地。

这看起来并不像简化的结果，但到现在我们还没有完成。注意两节电池的负极都是接地的。因此，我们可以看到这样的符号。

和第5章、第6章中一样，可以用大写字母V（代表电压）来代替上图中的电池。这样，继电器看上去就如下图所示。

11门

113

下一段：[继续读取](https://workshop.closeclaw.top/api/ai/read/38270854-596f-4a26-8183-db8c968c6020.md?start=130&limit=10)
