当前位置: 首页 > 新闻 > 信息荟萃
编号:2725
编码的奥秘高清.pdf
http://www.100md.com 2020年2月7日
第1页
第4页
第14页
第23页
第40页
第218页

    参见附件(10323KB,488页)。

     编码的奥秘是作者Charles Petzold写的关于编码的书籍,主要讲述了编码是人类人间交流的基础,通过精彩的图解,带领读者了解计算机行业,了解编码。

    编码的奥秘内容介绍

    渴望交流是大多数人的天性。在本书中,“编码”通常指一种在人和机器之间进行信息转换的系统。换句话说、编码即是交流。有时我们将编码看得很神秘,其实大多数编码并非都是这样。大多数的编码都需要被很好地理解,因为它们是人类交流的基础。――《编码的奥秘》

    手电筒、英国人入侵、黑色的 猫和跷跷板与计算机有什么必然联系?本书向我们展示了使用语言的一些直观方法并创造新的方法来进行相互之间的交流。此书使我们明白了这种创造性――以及我们人类对交流的迫切需求――已经促进了过去两个世纪的革新

    在本书中,作者Charles Petzold用常见的对象和诸如布莱叶盲文、摩尔斯电码之类大家熟悉的语言系统,为那些曾经想知道计算机和其他智能机器内部“生命”奥秘的人们编排了一个生动的叙述。

    本书由灵活的图解和生动的故事组成。沿着作者的这种介绍思路,通过本书的学习你将会发现你已经获得了一个理解今天的PC、数字多媒体和因特网的真实背景。无论你的技术水平怎样,本书都将会使你陶醉,并且很可能唤醒读者参与计算机事业。

    编码的奥秘作者信息

    Charles Petzold从事个人计算机及编程方面的写作长达15年之久。他的经典着作《Programming Windows》现已出至第5版,该书影响了整个一代编程人员。无论您的技术背景是何种程度,只要您有兴趣了解计算机的工作原理,就可以从本书中体会到作者作为一名老师和启发者的智慧。

    本书用大量的篇幅讲述了与计算机原理相关的各种编码方法,并通过数字逻辑电路(包括逻辑与开关、逻辑门电路与触发器、二进制加法器等)以及存储器、微处理器的形成、组织及发展阐述了编码的实现。此外,本书还涉及到计算机系统、操作系统、编程语言等的产生及发展,甚至对计算机图形化的相关技术也给了一个全面的描述。阅读本书,相信您会从它图文并茂的编排组织、通俗风趣的语言文字、广泛丰富的背景知识中体会到作者超凡的智慧和深邃的学问。本书定会带您去畅游计算机内部世界并和您共同去探索编码的奥秘。

    编码的奥秘章节目录

    第1章电筒密谈

    第2章编码与组合

    第3章布莱叶盲文与二元编码

    第4章手电筒剖析

    第5章绕过拐弯的通信

    第6章发报机与断电器

    第7章土进制记数法

    第8章其他进位制记数法

    第9章二进制数

    第10章逻辑与开关

    第11章逻辑门电路

    第12章二进制加法机

    第13章如何实现减法

    第14章反馈与触发器

    第15章字节与士云进制

    第16章存储器组织

    第17章自动操作

    第18章从算盘到芯片

    第19章西种典型的微处理器

    第20章ASCI码和字符映射

    第21章总线连接

    第22章操作系统

    第23章定点数和淫点数

    第24章高级语言和低级语言

    第25章图形化革金

    编码的奥秘截图

    目录

    第1章电筒密谈

    第2章编码与组合

    第3章布莱叶盲文与二元编码

    第4章手电筒剖析

    第5章绕过拐弯的通信

    第6章发报机与断电器

    第7章十进制记数法

    第8章其他进位制记数法

    第9章二进制数

    第10章逻辑与开关

    第11章逻辑门电路

    第12章二进制加法机

    第13章如何实现减法

    第14章反馈与触发器

    第15章字节与十六进制

    第16章存储器组织

    第17章自动操作

    第18章从算盘到芯片第19章两种典型的微处理器

    第20章ASCII码和字符映射

    第21章总线连接

    第22章操作系统

    第23章定点数和浮点数

    第24章高级语言和低级语言

    第25章图形化革命第1章电筒密谈

    假若你才10岁,你的好朋友与你临街而住,而且你们卧室的窗户面对着

    面。每天晚上,当父母像平常一样很早催你上床睡觉时,你可能还想与

    好朋友交流思想、发现、小秘密、传闻、笑话和梦想,没有人可以责备

    你,毕竟,渴望交流是大多数人的天性。

    当你们卧室还亮着灯时,你和你的好朋友可以临窗舞动手臂、打手势或

    以身体语言来交流思想,但复杂一些的交流就有些困难了。而且一旦父

    母宣布“熄灯”,交流也就无法继续进行了。

    如何联系呢?用电话吗?10岁的小孩子屋里有电话吗?即使有,你们的

    谈话可能被偷听。如果家里的电脑通过电话线联了网,它可能会提供无

    声的帮助,不过很不幸,它也不会在你的房间里。

    你和朋友采用的方法是用手电筒。所有的人都知道手电筒是为孩子们藏

    在被窝里看书而发明的,它也适合在黑暗中用来交流。它无声无息,且

    光的方向性很好,不会从卧室的门缝中泄露而使家人起疑。

    用手电筒的光可以交谈吗?这值得一试。一年级你就学过在纸上写字母

    和单词,把这种方法运用到手电筒上看起来也合情合理。你所需做的就

    是临窗而站,用光画出字母。画字母‘O’,就打开电筒,在空中画个

    圈,然后关上开关;字母‘I’则是画竖直的一笔。但是你很快发现这种方

    法行不通,当你注视来去飞舞的光柱时,会发现在脑海中将它们组合起

    来不是件容易的事,这些光划成的圈圈杠杠太不准确了。

    也许你曾经看过一部电影,影片中两个水手隔海用闪烁的光传递消息。

    在另一部电影中,一个间谍用镜子反射阳光向一间屋子中被俘获的同伙

    发送讯息。这就给了你启发,你起先设计一种简单的交流方法,使字母

    表中的每个字母与一定数目的闪烁相对应。A闪一下,B闪两下,C闪三

    下,如此递推,Z就闪烁26下。BAD这个词由字母间有间隔的两闪、一

    闪、四闪组成,这样你不会误以为它是闪七下的字母G了。词间的停顿

    则比字母间的停顿时间稍长一些。

    这看起来很有希望,采用这种方法的优点是你不需要在空中挥舞手电

    简,只需对准方向按开关就行了;缺点是你试图发送的第一个消息(“Howareyou?”)就需要131次闪烁,更糟的是,你忘了定义标点符

    号,所以无法表示句尾的问号了。

    这离问题的解决已经很近了,你想别人以前肯定也遇到过类似的问题,你解决它的思想一定是正确的。为了解决问题,白天的图书馆之行使你

    发现了神奇的摩尔斯电码(Morse code),这正是你想要的,即使你不

    得不重新学习如何“写”字母表中的字母。

    以下就是区别:在你发明的体系中,每个字母是一定数目的闪烁,从闪

    烁一下的A到闪烁26的Z;而在摩尔斯电码中,有长短两种闪烁,当

    然,这会使摩尔斯电码更为复杂,但它在实际应用中却被证实是更有效

    的。那句“How are you?”现在仅需32次而不是131次闪烁,而且这还包

    含了问号。

    在讨论摩尔斯电码的工作原理时,人们并不说“长闪烁”、“短闪烁”,他

    们使用“点(dot)”和“划(dash)”,因为这样易于在印刷品上表示。在

    摩尔斯电码中,字母表中的每一个字母与一个点划序列相对应,正如你

    在下表看到的:

    尽管摩尔斯电码与计算机毫不相关,但熟悉它的本质却对深入了解计算

    机内部语言和软硬件的内部结构有很大的帮助。

    在本书中,编码或代码(Code)通常指一种在人和机器之间进行信息转

    换的系统(体系)。换句话说,编码便是交流。有时我们将编码看成是密码(机密),其实大多数编码并不是的。大多数的编码都需要被很好地

    理解,因为它们是人类交流的基础。

    在《百年孤独》的一书的开篇,马尔克斯回忆了一个时代,那时“世界

    一片混沌,许多事物没有名字。为了加以区别才给事物各个命名。”这

    些名字都是随意的,没有什么原因说明为什么不把猫称为狗或不把狗称

    为猫。可以说英语词汇就是一种编码。

    我们用嘴发出声音组成单词,这些词可以为那些听得到我们声音,理解

    我们所用语言的人所听懂,我们称这种编码为“口头语言”或“语音”。对

    写在纸上(或凿在石头上、刻在木头上或通过比划写在空气中)的词,还有一种编码方式,那就是我们在印刷的报刊,杂志和书籍上看到的字

    符,称之为“书面语言”或“文本”。在许多语言中,语音和文本间有很强

    的联系。例如在英语中,字母或一组字母与一定的读音相对应。

    手势语言的发明帮助了聋哑人进行面对面的交流。这是一种用手和胳膊

    的动作组合来表达词语中的单个字母、整个词及其基本概念的语言。对

    盲人来说,他们可以使用布莱叶盲文(Braille)。这种文字使用凸起的

    点代表字母,字母串和单词。当谈话内容要被迅速地记录下来时,缩写

    和速记是很有用的。

    人们在相互沟通时使用了各种不同的编码,因为在不同的应用场合,其

    中的一些较其他的更为简便。例如,语言不能在纸上存储,所以使用了

    文字;语言、文字不适合用来在黑夜中安静地传递消息,故摩尔斯电码

    是一个方便的替代品。只要一种编码可以适用于其他编码

    所不能适用的场合,它就是一种有用的编码。

    以后将看到,计算机中使用了不同的编码来传递和存储数字、声音、音

    乐、图像和视频(电影)。计算机不能直接处理人类世界的编码,因为

    它不能模拟人类的眼睛、鼻子、嘴和手指来接收信息。尽管这些年来计

    算机的发展趋势使我们的桌上电脑具有捕获、存储、处理和提供人类交

    流中所使用的各种信息的能,而且不论这些信息是视觉的(文字和图

    片)、听觉的(语言、声音及音乐)还是两者的混合(动画和电影)。

    所有这些信息都要求使用它们自己的编码方式,正如交谈需要使用人的

    某些器官(嘴和耳朵),而书写和阅读则需要使用另外一些器官(手和

    眼睛)一样。用手电筒发送摩尔斯电码时,电筒的开关快速地合开代表一个点,让电

    筒照亮稍长的时间则代表一个划。举例来说,发送字母A,要先快速地

    合开开关,然后再稍慢些合开。在发送下一个字母前要有短暂的停顿。

    约定划的时间大约是点的3倍。例如,如果点的照亮时间为1秒,那么划

    就是3秒。(实际上,摩尔斯电码的传递速度要快得多。)接收者看到

    了短闪和长闪就知道是A。

    摩尔斯电码中点划之间的间隔是极为关键的。例如,发送字母A时,点

    划之间的间隔应与一个点的时间大致相同(如果点的时间是1秒,那么

    间隔的时间也是1秒)。同一个词中字母间间隔稍长,约为划的持续时

    间(或者3秒,如果那是划的持续时间的话)。下面是单词“hello”对应

    的摩尔斯电码,图中示意了字母间的间隔(隙):

    单词之间相隔大约2倍于划的时间(如果划是3秒,那么间隔即为6

    秒)。下面是“hi there”对应的编码(码字):

    手电筒开和关的时间长度并没有限定,这取决于点的时间长度,点长又

    由手电筒开关触

    发的速度和摩尔斯电码发送者记忆电码的熟练程度来决定,熟练发送者

    的划也许与生手的点等长。这个小问题会使接收电码有些困难,但在一

    两个字母之后,接收者通常就可以辨认出哪个是点,哪个是划了。

    粗看起来,摩尔斯电码的定义-这里所谓的定义是指与字母表中的字母

    相对应的各种点划序列—与打字机字母的排列一样是随意的。但仔细观

    察后你会发现不完全如此,简短的码字分配给了使用频率较高的字母,例如E和T,爱赌博的人和“财富之轮”爱好者可能一下就注意到了这个问

    题;不常用的字母如Q和Z(它们在赌局中是10点)则分配以较长的码

    字。

    几乎所有人都知道一点儿摩尔斯电码,国际遇险信号SOS的摩尔斯电码

    为“三点三划三点”。SOS并非缩写,选择它仅仅因为它有一个易记的摩

    尔斯电码序列。第二次世界大战中,英国广播公司选用贝多芬第五交响

    曲中的片段作为节目前奏—BAH、BAH、BAH、BAHMMMMM,听起来颇像摩尔斯电码中V(代表Victory)的码字。

    摩尔斯电码的一个缺点是它没有对大小写字母进行区分。除表示字母

    外,摩尔斯电码还用5位长的码字来表示数字:

    这些数字的码字看起来还有些规律(相对于字母对应的码字而言)。大多

    数标点符号的码字采用5位、6位或7位的码长:

    对欧洲一些语言中的重音字母以及一些有特殊用途的缩写定义了特别的

    码字,SOS就是这样一个缩写:发送时每个字母的码字之间仅有一点的

    时间间隔。

    如果有特制的用于发送摩尔斯电码的手电筒,你和朋友之间的交流就方

    便多了。这种手电筒除了常有的开关,还有一个按钮,按压按钮就可以

    控制电筒的亮灭。经过练习后,你们每分钟可以发送和接收5~10个单

    词。虽然仍比交谈慢(大概每分钟100个词左右)但已足够用了。当你和朋友最终熟记了摩尔斯电码时(这是唯一精通发送接收的方

    法),你也可以用它代替日常用的语言。为了达到最高的速度,可以

    发“滴(dih)”音代表点、“嗒(dah)”音代表划。摩尔斯电码同样也可将文

    字简化为用点和划两个符号表示。

    以上的关键在于“两”这个词—“滴、嗒”两个声音,“点、划”两种方式。

    实际上任何两种不同的东西经过一定的组合都可以代表任何种类的信

    息。 第2章编码与组合

    摩尔斯电码由萨缪尔·摩尔斯(1791—1872)发明,本书后面会在多处

    提到他。摩尔斯电码是随着电报机的发明而产生的,电报机我们以后也

    还要做详尽的说明。正如摩尔斯电码很好地说明了编码的本质一样,电

    报机也提供了理解计算机硬件的良好途径。

    大多数人认为摩尔斯电码的发送易于接收,即使你没有记住摩尔斯电

    码,也可以方便地借助下面这张按字母顺序排列的表发送:

    接收摩尔斯电码并将其翻译回单词比发送费时费力多了,因为译码者必

    须反向地将已编码的“滴-嗒”序列与字母对应。例如,在确定接收到的

    字母是“Y”之前,必须按字母逐个地对照编码表。

    问题是我们仅有一张提供“字母→摩尔斯电码”的编码表,而没有一张可

    供逆向查找的“摩尔斯电码→字母”译码表。在学习摩尔斯电码的初级阶

    段,这张译码表肯定会提供很大的便利。然而,如何构造译码表却毫无

    头绪,因为我们似乎无法找出这些按字母顺序排列的“滴-嗒”序列的规

    律。

    那么忘记那些字母序列吧,也许按照码字中“滴”“嗒”的个数来排列会是

    个更好的尝试。例如,仅含一个“滴”或“嗒”的摩尔斯电码序列只可能代表E或T这两个字母之一:

    两个“滴”或“嗒”的组合则代表了4个字母I、A、N、M:

    三个“滴”或“嗒”的序列代表了8个字母:

    最后(如果不考虑数字和标点符号的摩尔斯电码),四个“滴”或“嗒”的

    序列则共代表了16个字母:

    四张表共包括2+4+8+16=30个编码,可与30个字母相对应,比拉丁字母所需的26个字母还多了4个。出于这个原因,在最后一张表中,你可能

    注意到有4个编码与重音字母相对应。

    在翻译别人发送的摩尔斯电码时,上面4张表提供了极大的便利。当你

    接收到一个代表特定字母的码字时,按其中含有的“滴”“嗒”个数,至少

    可以跳到其对应的那张表中去查找。每张表中,全“滴”的字母排在左上

    角,全“嗒”的字母排在右下角。

    你注意到4张表大小的规律了吗?每张表都恰好是其前一张表的两倍大

    小。这其中包含的意义是:前一张表的码字后加一个“滴”或加一

    个“嗒”,即构成了后一张表。

    可以按下面的方式总结这个有趣的规律:

    四张表中每张码字数都是前一张的两倍,那么如果第一张表含2个码

    字,第二张表则含2×2个码字,第三张表2×2×2个码字。以下是另一种表

    达方式:

    当然,如果遇到数的自乘,可以用幂表示,例如2×2×2×2可以写成24。

    数字2、4、8、16分别是2的1、2、3、4次幂,因为可以用依次乘2的方

    法将它们计算出来。由此我们的总结还可以写成下面的方式:这张表简单明了,码字数是2的次方,次方数目与码字中含有

    的“滴”“嗒”数目相同。我们可以把表总结为一个简单的公式:

    码字数=2 “滴”与“嗒”的数目

    很多编码中都用到2的幂,在下一章中我们会看到另一个例子。

    为了使译码的过程更为简便,可以画出如下一张树形图:这张表表示出了由“滴”与“嗒”的连续序列得出的字母。译码时,按箭头

    所指从左到右进行。例如,你想知道电码“滴-嗒-滴”代表的字母,那么

    从最左边开始选择点,沿箭头向右选择划,接着又是点,得出对应的字

    母是R,它写在最后一个点的旁边。

    如果认真考虑,会发现事先建立这样一张表是定义摩尔斯电码所必需

    的。首先,它保证了你不会犯给不同的字母相同码字的错误!其次,它

    保证你使用了全部的可用码字,而没有使“滴”与“嗒”的序列毫无必要的

    冗长。

    我们可以加长码字至5位或更长,5位长的码字又提供了额外的

    32(2×2×2×2×2或2 5)个码字。一般而言,这就足够10个数字和16个标

    点符号使用。实际上,摩尔斯电码中的数字确实是5位的,但在许多其

    他编码方式中,5位码字常用于重音字母而不是标点符号。

    为了包含所有的标点符号,系统必须扩充至6位表示,提供64个附加编

    码,此时系统可表示2+4+8+16+32+64共126个字符。这对摩尔斯电码而

    言太多了,以至于留下许多“未定义”的码字。此处“未定义”指不代表任

    何意义的码字,如果在你接收的摩尔斯电码中有未定义的码字,就可以

    肯定发送方出了差错。

    由于推出了下面这条公式:

    码字数=2 “滴”与“嗒”的数目

    我们就可以继续导出更长的码字位数所代表的码字数目。很幸运,我们

    不必为确定码字数目而写出所有可能的码字,我们所要做的不过是不断

    地乘2而已:摩尔斯电码被称为二元码(binarycode),因为编码中仅

    含“滴”和“嗒”。这与一个硬币很相似,硬币着地时只可能是正面或反

    面。二元事物(例如硬币)、二元编码(例如摩尔斯电码)常常用2的

    乘方来描述。

    上面所做的对二元编码的分析在数学上的一个分支—组合学或组合分析

    里只能算是一个简单的练习。传统上,由于组合分析能够用来确定事件

    出现的几率,例如硬币或骰子组合的数目,所以它常用于概率统计,但

    它也同样有助于我们理解编码的合成与分解。 第3章布莱叶盲文与二元编码

    摩尔斯不是第一个成功地将书写语言中的字母翻译成可解释代码的人,他也不是第一个因为其编码而受到人们纪念的人,享有这个荣誉的是一

    个晚摩尔斯18年出生的早慧的法国失明少年。虽然人们对他的生平所知

    甚少,但就是所知的这一些却足以给后人留下深刻印象。

    路易斯·布莱叶1809年出生于法国的Coupvray,他的家乡在巴黎以东25

    英里,父亲以打造马具为生。3岁时,在这个本不该在父亲作坊里玩耍

    的年龄,小布莱叶意外地被尖头的工具戳中了眼睛。由于伤口发炎,感

    染了另一只眼,他从此双目失明。布莱叶原本注定在贫困潦倒中度过一

    生(正如那时大多数盲人一样),但他的聪明才智和求知欲不久即显露

    了出来。在本地牧师和一位学校老师的帮助下,布莱叶和其他孩子一道

    上了学,10岁那年又前往巴黎的皇家盲人青年学院学习。

    盲人教育的一大障碍就是他们无法阅读印刷书籍。Valentin Haüy(1745—

    1822),巴黎学校的创始人,发明了一种将字母凸印以供触摸阅读的方

    法。但这种方法使用起来较为困难,并且只有很少的书籍用这种方

    法“制造”。

    视力正常的Haüy陷入了一种误区。对他而言,字母A就是A,它看起来

    (或感觉起来)也必须像是个A。(如果给他手电筒作为交流工具,他

    也会试图在空气中画出字母的形状,而我们已经知道这种方法并不有

    效。)Haüy也许没有意识到一种与印刷字母完全不同的编码会更适于盲

    人使用。

    另一种可选的编码有一个出人意料的起源。法国陆军上尉Charles

    Barbier在1819年发明了一种他自称为écriture nocturne的书写体系,这种

    体系也被称为“夜间文字。他使用厚纸板上有规律凸起的点划来供士兵

    们在夜间无声地传递口信(便条),士兵们使用尖锥状的铁笔在纸的背

    面刺点和划,凸起的点可以用手指感觉阅读。

    Barbier体系的问题是其过于复杂。Barbier没有用凸起的点来代表字母表

    中的字母,而是用其代表声音。这样的系统中一个单词通常需要许多码

    字表达。这种方法在野外传递短小消息还算有效,但对长一些的文章而

    言则有明显不足,更不要说是整本的书籍了。布莱叶在12岁时就熟悉Barbier方法了,他喜欢使用这些凸点,不仅因为

    它们易于用手指阅读,更因为它们易于书写。教室里拿着铁笔和纸板的

    学生可以记笔记供课后阅读。布莱叶勤奋地工作试图改进这种编码系

    统。不出3年(在他15岁时),他创建了自己的系统,其原理直到今天

    还在使用。布莱叶系统有很长时间仅局限在他所在的学校使用,后来它

    逐渐扩散到世界各地。1835年,布莱叶染上了结核病。1852年,在他43

    岁生日过后不久,他便去世了。

    时至今日,布莱叶系统的改进版本甚至可以与有声录音带竞争,它为盲

    人提供了与书写世界联系的途径。布莱叶方法仍是适于既聋又盲的人阅

    读的唯一方法。近来年,随着电梯和自动语言机的普及,布莱叶系统更

    加广为人知。

    本章将剖析布莱叶编码的编码方法及其工作原理,不过不必真正学习布

    莱叶编码或记住任何东西,我们只要大概了解一下编码的本质就行了。

    布莱叶编码中,普通书写语言的每个字符—具体而言如数字、字母和标

    点符号—都被编码成局限在2×3小格中一个或多个凸起的点。这些小格

    一般被标记为1~6:

    在当今实际使用中,特殊的打字机或刻印机可以在纸上打出布莱叶编码

    中的小点。

    由于在书中夹印几页布莱叶编码极其昂贵,我们使用了在通常印刷品中

    常用的布莱叶码的表示方法。在这种表示方法中,小格中的6个点全部

    印刷出来,大点代表小格中的凸起点,小点则代表平滑的点。例如下图

    中的布莱叶字母中,点1、3、5是凸起的,点2、4、6则没有:在这里吸引我们的问题是:点是二元的。一个特定的点不是凸起的就是

    平滑的,那么6个点的组合数目就是2×2×2×2×2×2,或64(2 6)。

    因此,布莱叶编码系统可以代表64个不同的码字。以下就是所有的64个

    码字:

    如果我们发现布莱叶编码只用了64个码字中的一部分,我们会疑问为什

    么64个码字中有一些不被使用;如果发现布莱叶编码使用了多于64个的

    码字,则又会让人怀疑我们是否神志清醒或数字计算的真实性,2乘2是

    等于4吗?

    分析布莱叶编码,还是从基本的小写字母开始:举例来说,短语“you and me”在布莱叶编码中看起来是这样的:

    注意,代表同一个单词中的字母的小格用一个小距离分隔,大一些的距

    离(一般是没有凸点的小格)用来分隔不同的单词。

    这就是布莱叶发明的布莱叶编码的基础,布莱叶还为法文中出现的重音

    字母设计了码字。注意,W没有对应的码字,这时由于在古法语中没有

    W(不必担心,这个字母最终还是会露面的)。这样算来,我们仅使用

    了64个码字中的25个。

    通过仔细的检查,会发现上面的布莱叶编码存在特定的规律。第1行

    (从字母a~j)只用了小格的上面4个点—点1、2、4、5;第2行除了点

    3凸起外其余都与第1行相同,第3行则除了点3、6凸起外其余都与第1行

    相同。

    在布莱叶之后,布莱叶编码在许多方面有了扩展,现在大多数英语出版

    物所使用的系统是二级布莱叶码。二级布莱叶码采用了许多缩写来简化

    编码树以提高阅读速度。以下的三行(包括“完整的”第3行)显示了下面这些词的码字:

    因此,在二级布莱叶码中,短语“you and me”被写成如下形式:

    到现在为止,已描述了31个码字—词间没有凸起点的空格和三行每行10

    个用于字母和单词的码字。这离理论上可用的64个码字还相距甚远。不

    过我们将要看到,在二级布莱叶码中,没有任何浪费的码字。

    首先,我们使用a~j的编码加上凸起的6号点。它们代表词中的缩写,这其中包括W和另一个词的缩写:

    举例来说,“about”可以用二级布莱叶码写成如下形式:其次,可以把代表字母a~j的码字中的点下移一行,即仅使用点2、3、5和6。这些码字根据上下文代表标点符号或缩写:

    头4个码字代表逗号、分号、冒号和句号。注意左括号和右括号用同一

    个码字代表,但左引号和右引号则使用了不同的码字。

    已经有51个码字了。接下来的6个码字使用点3、4、5、6尚未使用的组

    合来表示缩写和几个额外的标点符号:

    “ble”的码字非常重要,因为当它不是单词的一部分时,它表明其后跟随

    的码字要被翻译成数字,这些数字的编码与a~j的编码相同:

    由此,如下码字的序列代表数字256:如果你一直在计数的话,我们还需要7个码字才能达到总计的64个码

    字。下面就是剩余的7个码字:

    第一个(点4凸起)是重音字母标识符,其余的作为一些缩写的前缀,也用于其他用途:点4、6凸起时(本行的第5个码字),该码字代表数

    字中的小数点或强调标识符,这由上下文决定。点5、6凸起时,码字则

    是与数字标识对应的字母标识。

    最后(也许你正在疑惑布莱叶编码如何表示大写字母),我们用6号点

    来作为大写标识,它表明其后跟随的字母是大写的。例如,可用如下的

    码字写出该编码创始人的名字:

    这包含大写字母标识、字母l、缩写ou、字母i和s,空格,另一个大写字

    母标识,字母b、r、a、i、l、l和e(在实际应用中,该名字还可以再删

    掉最后两个不发音的字母)。

    总结一下,我们已经看到了6个元素(凸点)如何恰好形成64个码字。

    这64个码字根据上下文大多有双重含义,其中有数字标识以及取消数字

    标识作用的字母标识。这些标识改变了跟随其后的码字的含义—从字母

    变数字或从数字变字母。起这种作用的码字常被称为“先行码前置

    码”或“转义码”,它们更改其后字符的含义直至更改作用被取消。大写标识表示其后的字母(也仅有字母)应写成大写,这种码字被称

    为“换码代码”。“换码代码”使你“避免”那种单调的、常规的码字解释,而转入一种新的解释方法。在以后几章中可以看到,当把书面语言转换

    为二元码字时,“换码代码”和“转义码”的使用是很普遍的。 第4章手电筒剖析

    手电筒的用途极为广泛,用于在黑暗的遮盖物里阅读和用于发送编码消

    息只是两个用途最明显的方面。最普通的家用手电筒也能在教学演示中

    说明神秘物质电(electricity)时扮演中心角色。

    电是一种令人称奇的现象,尽管它已得到普遍应用,但依然还保持着很

    大的神秘性,即使对那些自称已经弄清楚它的工作原理的人而言也是这

    样。但恐怕不管怎么样,我们都必须好好努力钻研一下电学。幸运的

    是,我们只需要明白一小部分基本概念就可以理解它在计算机中是怎样

    应用的。

    手电筒当然是一种大多数家庭都拥有的较简单的电器。拆开一支有代表

    性的手电筒,你会发现它包括一对电池,一个灯泡,一个开关,一些金

    属片和一个把所有零件装在一起的塑料筒。

    只用电池和灯泡,就可以自己做一个简单的手电筒。当然,还需要一些

    短的绝缘线(末端的绝缘皮除掉)和足够多的连接物:

    注意上图右边两个松开的线端(头),那就是开关。如果电池有电并且灯泡也没有烧坏的话,接触两个线端,灯就亮了。

    这是我们要分析的头一个简单电路,首先要注意的是电路是一个回路。

    只有从电池到电线、到灯泡、到开关、再回到电池的路径是连续畅通

    的,灯泡才会亮。电路中任何一点断开都会引起灯泡的熄灭。开关的目

    的就是控制电路开闭这个过程。

    电路环接的特性提示我们有某种物质在电路中循环移动,可能与水在水

    管里流动有某些相似。“水与水管”的类比常用来解释电的工作机理,但

    最终它也像其他类比一样不可避免地解释不下去了。电在宇宙中是独一

    无二的,必须用它的术语来解释它。

    在对电的工作的理解中,最流行的科学理论是电子理论(electron

    theory),该理论认为电起源于电子的运动。

    众所周知,一切物质—我们能看到、感觉到的东西—(通常)是由极其

    微小的被称为原子的东西构成。每一个原子是由三种微粒构成的,即中

    子、质子和电子。你可以把原子画成一个小的太阳系,中子和质子固定

    在原子核内而电子像行星环绕太阳一样围绕原子核运动.

    需要解释一下的是该模型与你在一个放大倍数足够大的显微镜下看到的

    真正原子不是一模一样的,它只是一个示例模型。

    图中原子包含3个电子、3个质子和4个中子,说明这是一个锂原子。锂

    是已知的112种元素之一,它们的原子序数由1~112。一种元素的原子

    序数是指元素的原子核中质子的个数,通常也是其电子数。锂的原子序

    数为3。原子能够通过化学合成形成分子,分子与组成它的原子的性质通常是不

    同的。比如水分子包含两个氢原子和一个氧原子(即H 2

    O)。显然水既

    不同于氢气,也不同于氧气。同样,食盐分子由一个钠原子和一个氯原

    子构成,而钠和氯都不可能成为法国馅饼的调味品。

    氢、氧、钠、氯都属于元素,水和食盐都属于化合物。但是盐水是一种

    混合物,而不是化合物,因为其中水和食盐都保持它们各自的性质不

    变。

    一个原子的电子数通常等于其质子数。但在某种特定环境下,电子能从

    原子中电离出来,这样电就产生了。

    单词electron和electricity都源于古希腊词elektron,你可能猜它的意思就

    是“极其微小而不可见的东西”。但事实并非如此-elektron的真正意思

    是“琥珀”,一种玻璃状的硬质树液。这个看似不相关的词源来自于古希

    腊人所做的实验,他们用琥珀与木头相摩擦而产生我们今天所说的静

    电。在琥珀上摩擦木头使木头从琥珀获得电子,结果木头所含的电子数

    多于质子数而琥珀所含的电子数小于质子数。在更多的现代实验中,地

    毯能从鞋底获得电子。

    质子和电子具有带电荷的特性,质子带正电荷(+)、电子带负电荷

    (-)。中子是中性的,不带电。即便我们用加减号来标明质子和电

    子,但符号并不表示算术运算中的加号和减号的意思,也不表示质子拥

    有某些电子所不具备的东西。使用这些符号仅仅表示质子和电子在某个

    方面性质相反。这个相反的特性也正表明了质子和电子是如何相互关联

    的。

    当质子数与电子数相等时,它们是最适合和最稳定的。质子数与电子数

    的不平衡会导致它们趋于平衡。静电火花就是电子运动的结果,是电子

    从地毯通过你的身体再流回到鞋子的过程引起的。

    描述质子和电子关系的另一条途径是注意观察异电性相吸同电性相斥的

    现象,但光凭看原子结构图我们是不能猜想到的。表面上看原子核中挤

    在一起的质子是互相吸引的。质子是通过比同性斥力大的某种力聚合在

    一起的,这种力叫强内力。释放核能的原子核裂变就是由于强内力导致

    的。本章只讨论通过得失电子获得电(电能)的问题。

    静电不只存在于手指触摸门把手时闪出的火花之中。暴风雨时,云层的下层积累电子而云层的顶层失去电子,闪电的瞬间,电子的不平衡马上

    消失。闪电正是大量的电子迅速从一端转移到另一端的结果。

    手电筒电路中的电能显然比电火花或闪电之中的电能要好利用得多。灯

    泡能稳定持续地亮是因为电子并不是从一点跳到另一点。当电路中的一

    个原子把一个电子传给邻接的另一个原子时,它又从另一个邻接的原子

    获得电子,而这个原子又从它的一个邻接原子获得电子,如此依次循

    环。可见电路中的电就是从原子到原子的电子通路。

    这不可能自发形成。仅仅只把一些破旧的电路材料连接在一起是不可能

    有电能产生的,需要某种可以激发电子环绕电路移动的物质。再分析一

    下前面所画的简单手电筒电路图,可以肯定激发电子运动的既不是电

    线,也不是灯泡,那么最有可能的就是电池了。

    几乎每一个人都多少了解手电筒里所用电池的类型方面的一些知识:

    ·它们都呈管状,且大小不同。比如有D、C、A、AA和AAA等型号。

    ·无论电池大小怎样,它们都被标有“1.5伏”。

    ·电池的一端是平的,标有一个负号(-);另一端中间有一个小突

    起,标有一个正号(+)。

    ·要想设备正常工作,就要正确安装电池(注意电池极性)。

    ·电池的电能最终将用尽。有的电池可以充电,有的不行。

    ·由此可以猜测,电池是用某种奇特的方式产生电能。

    所有的电池中都发生着化学反应,一些分子裂变成其他分子或者结合形

    成新的分子。电池中有化学物质,这些化学物质就是用来起反应,从而

    在标有(-)的电池的一端(称为负极或阴极)产生多余的电子而在电

    池的另一端(称为正极或阳极)需要得到电子。这样,化学能转化为电

    能。

    只有当某种特别的电子通过某条途径从电池负极出发,然后再传送到正

    极时,化学反应才能发生。因此假如一节空电池放在那里,那么什么事

    也不会发生(事实上,化学反应还是在进行的,只是速度极慢)。只有

    一条电路能将电子运离负极又为正极提供电子时,反应才会发生。电子在下图电路中是沿逆时针方向运动的:

    如果不是基于这个简单的事实:所有的电子,不管来自什么地方,都是

    一模一样的,否则,来自电池的化学物质里的电子就不可能如此随意地

    与铜导线的电子混合在一起的。铜导线的电子与任何其他电子是没有区

    别的。

    注意,两个电池都是向着同一个方向。放在下面的电池的正极从上面电

    池的负极获得电子,这样两个电池就好像结合形成了一个更大的电池,这个大电池一端为正极,另一端为负极,其电压是3伏而不是1.5伏了。

    如果把电池中的一个倒置,电路就会连不通,如下图所示:在化学反应中,两个电池的正极都需要获得电子,但由于它们相互接

    触,电子无法通过某种途径到达它们。如果两个电池的正极连上了,那

    么它们的负极也应该连上,如下图所示:

    这样的电路还是能连通。电池的这种连接方法称为并联,前一种连接方

    法称为串联。并联后的电压与单个电池电压同样都是1.5伏。并联后的

    灯仍然可能亮,但不如串联时亮度大,不过电池的寿命将会是串联时的

    两倍。通常认为电池为电路提供电能,但同样也可以认为电路为电池化学反应

    的发生创造了条件。电路将电子从负极传送到正极。电路中的化学反应

    将一直进行到所有的化学物质耗尽,这时你就需要换电池或是给电池充

    电了。

    电子从电池的负极到正极流经了导线和灯泡。为什么需要导线?电不能

    通过空气传导吗?噢,可以说能,也可以说不能。电能够通过空气导通

    (尤其是潮湿的空气),否则也观察不到闪电。但电不能很轻易地流经

    空气。

    一些物质的导电能力比其他物质的导电能力明显要好。元素的导电能力

    取决于它内部的

    原子结构。电子绕核旋转是在不同的轨道上的,这些轨道称为层。最外

    层只有一个电子的原子最容易失去那个电子,这正是导电需要具备的性

    质。这些物质易导电因而被称为导体。铜、银和金都是良好导体,这三

    种元素位于元素周期表的同一列不是巧合。铜是最常用的导线材料。

    导电物质的对立物质称为绝缘物质。一些物质阻碍电的能力比其他物质

    阻碍电的能力强,这种阻碍电的能力称为电阻。如果一个物质有很大的

    电阻-说明它根本不能导电—它就被称为绝缘体。橡胶和塑料都是很好

    的绝缘体,因而它们常用来做电线的绝缘皮。在干燥空气的情况下,布

    料和木材也是很好的绝缘体。其实只要电压足够高,任何物质都能导

    电。

    铜的电阻很小,但它仍有电阻。导线越长,电阻越大。如果你用数里长

    的导线连接手电筒,导线的电阻将会大得令手电筒不亮。导线越粗,电

    阻越小,这可能有点违反直觉。你也许认为粗的导线需要更多的电

    来“充满它”。而事实上,导线越粗,电子越容易通过它。我已

    经提到过电压,只是还没有给出它的定义。一节电池为1.5伏特意味着

    什么呢?实际上,电压-得名于Count Alessandro Volto(1745—1827),他

    于1800年发明了第一节电池-是初等电学中较难理解的概念之一。电压

    表征电势能的大小,无论一节电池是否被连通,电压总是存在的。

    假设有一块砖头。如果把它放在地上,它的势能很小。当你把它举起至

    离地面4英尺高时,它的势能就增加了。你只要把砖块扔下,就能感觉

    到势能的存在。当你在一座高楼的顶层举着砖块时,它的势能更大。上面三个例子里,你只是拿着砖块而什么也没做,但砖块的势能却不同。

    电学里更早的一个概念是电流。电流取决于电路中飞速流动的电子的数

    量。电流用安培来度量,它得名于André Marie Ampére(1775—1836),一般简称安,比如“10安的保险丝”。当6240000000000000000个电子在1

    秒内流过一个特定的点时,就是1安培电流。

    用水和水管作个类比。电流与流经水管的水量很相似,而电压类似于水

    压,电阻类似于水管的粗细程度—水管越小、阻力越大。因此水压越

    高,流过水管的水量越大;水管越小,流过它的水量就越少。流过水管

    的水量(电流)与水压(电压)成正比而与水管的阻力(电阻)成反

    比。

    在电学中,如果知道电压和电阻的大小,就可计算出电流的大小。电阻

    —物质阻碍电流通过的能力—用欧姆度量,得名于Georg Simon

    Ohm(1789—1854),他提出了著名的欧姆定律,定律中表述

    I=ER

    这里I表示电流,E表示电压,R表示电阻。

    举个例子,让我们看一节空置的电池:

    它的电压E为1.5伏,这是电势能。因为电的正负两极只被空气导接,因

    而电阻(用R表示)非常、非常大,这就意味着电流I等于1.5除以一个

    巨大的数,电流几乎为0。

    现在用一根短铜导线连接电池的正负两极(从现在开始,本书中导线外

    的绝缘皮不再表示出来):我们已经知道这是短路。电压仍是1.5伏,但电阻很小,这时电流等于

    1.5除以一个很小的数,也即意味着电流很大。很多很多的电子将流过

    导线。实际上,电流将受到电池物理大小的限制。电池不可能导通如此

    大的电流,且实际电压也将低于1.5伏。如果电池足够大,导线将会发

    热,因为电能转化为了热能。如果导线变得很热,它将会发光(辉光放

    电)甚至可能熔化。

    绝大部分电路都介于这两个极端之间。可以把它们统一表述为如下图:

    电气(子)工程师用折线来表征电阻。这里它表示电阻不是特别大,也

    不是特别小。

    如果导线的电阻很小,导线将发热发光,这就是白炽灯的工作原理。白

    炽灯泡是由美国最著名的发明家托马斯·爱迪生(1847—1931)发明

    的。在他致力于发明灯泡的时候(1879年),这个思想已被普遍接受并

    且同时还有不少其他发明家在研究这个问题。

    灯泡里的细线叫灯丝,通常用金属钨做成。灯丝的一端连在基座底部的

    尖端,另一端连在金属基底的一个侧面,用一个绝缘体将它与尖端分

    开。细线的电阻使它发热。如果暴露在空气中,钨就会由于达到燃烧温

    度而烧起来。但在灯泡的真空里,钨丝就发亮了。大多数普通手电筒用两节电池组成一组,总电压是3.0伏。且选用电阻

    大约为4欧姆的灯泡。这样,电流等于3除以4即0.75安培,也就是750毫

    安。这就意味着每秒钟有4680000000000000000个电子通过灯泡。(注

    意,如果你用欧姆表直接测量手电筒灯泡的电阻,你只会得到一个比4

    欧姆小得多的结果。这是因为钨的电阻还与它的温度有关系,温度越

    高,电阻越大。)

    你可能已经发现,你买回家的灯泡上标记了特定的瓦特数。瓦特这个名

    词取自于著名的蒸气机发明家詹姆斯·瓦特(1736—1819)。瓦特是功

    率P的单位,它用下式计算

    P=E×I

    手电筒是3伏,0.75安培,那么灯泡的功率就要求2.25瓦特。

    家用照明灯大约为100瓦特,这是为家用电压120伏设计的。在这种情况

    下,电流为100瓦除以120伏即大约0.83安培。因此,100瓦特灯泡的电

    阻为120伏除以0.83安培即144欧姆。

    到此,我们大致分析了手电筒的每一个组成部分—电池、导线和灯泡。

    但是我们遗漏了一个最重要的部分、对,是它的开关。开关控制电路的

    开闭。当开关允许电流动时,我们说它是开的或合上的,而关的或断开

    的开关是不允许电流动的。(这里所表示的开、关的状态正好与门相

    反,合上的门不允许事物通过的,而合上的开关允许电通过。)开关或

    开或关,电流或有或无,灯泡或亮或不亮,就像摩尔斯和布莱叶发明的

    二元码一样,简单的手电筒或亮或不亮,它没有中间状态。二元码与电

    气电路之间的相似性将在后面的章节中起很大作用。 第5章绕过拐弯的通信

    你12岁了。一天,你最要好的朋友一家要搬到另一个镇上去了。此后,你经常和他在电话里聊天,但电话交谈与那些后半夜的手电筒摩尔斯电

    码会话完全不一回事。住在你隔壁的另一个好朋友最终成为你新的最要

    好的朋友。现在到了该教你的新朋友一些摩尔斯电码,让后半夜的手电

    筒重新亮起来的时候了。

    问题是你的新朋友的卧室窗户与你的不是面对面的。房子是挨着的,卧

    室的窗户都朝着同一个方向。除非你想办法在室外支起一些镜子,否则

    手电筒现在是不能适用来在黑夜中通信的。

    怎么办呢?

    现在,你可能已经知道有关电的一些知识了,因此你决定用电池、灯

    泡、开关和导线来做自己的手电筒。最初的实验中,你在你的卧室里接

    好电池和开关。两条导线接出你的窗子,跨过篱笆,再接进你朋友的卧

    室,并在那里再连好灯泡:

    尽管图中只示意了一节电池,但实际上你可能得用两个。在下面和以后

    的图中,用下图表示断开的开关:

    用下图表示闭合的开关:本章的手电筒与上一章中手电筒的工作原理是相同的,尽管本章的手电

    筒中连接组件的导线要长得多。当你闭合开关时,你朋友那边的灯泡就

    亮了:

    现在你可以用摩尔斯电码来发送消息了。

    一旦有一个手电筒起作用,你可以做另一个远距离手电筒,好让你的朋

    友可以发送消息给你:

    祝贺你!你已经装上了一个双向电报系统。你可能注意到这两个相似的

    电路彼此完全独立而没有联系。理论上,你可以给你的朋友发送消息而

    同时你的朋友也可以给你发送消息(尽管对于你的大脑而言,同时阅读

    和发送消息可能比较困难)。

    聪明的你发现如下改装电路能让你节省25%的导线:注意,现在两个电池的负极接在一起了。两个回路(电池到开关到灯泡

    再到电池)仍是独立工作,尽管它们连在一起像连体双胞胎。

    这种连接叫公用连接。在这个电路中,公用部分从左端灯泡和电池的接

    合点直到右端灯泡和电池的接合点。图中接合点用黑点标记出来了。

    进一步分析一下。首先当你按下开关,你朋友那边的灯就亮了。图中浅

    色回路中有电流流过:

    在电路的其余部分里没有电流流过,因为没有了可让电子通过的回路。

    当你不发消息而你的朋友发消息时,你朋友房间里的开关控制你房间里

    灯泡的亮灭。在下图浅色回路中有电流流过:当你和你的朋友想要同时发消息时,有时两个开关同时断开,有时一个

    断开一个闭合,有时两个同时闭合。在最后一种情况下,电路中电的流

    动如下图所示:

    公用部分(两个接合点之间)没有电流流过。

    通过公用部分把两个独立电路连接成一个电路,已经把两栋房子之间的

    四条导线减少到了三条,也即减少了25%的导线开支。

    如果不得不接很长距离的线路,我们可能会想到再减少一根导线。但不

    幸的是对于1.5伏的D号电池和小灯泡,这是不合适的。如果用的是100

    伏的电池和大得多的灯泡时,那就有办法了。

    这是个窍门:如果你要搭建电路的公用部分,你不需要任何导线。你可

    以用另外某种东西取代它。你所用的取代物是一个直径大约为7900英

    里,由金属、岩石、有机物等多为无生命的物质组成的巨大球体。它就

    是地球。

    上一章描述的良导体中有银、铜和金。事实上,地球不是一个很好的导体,尽管某些部分(如沼泽)的导电性能比其他部分(如干沙漠)要好

    得多。但我们知道导体越大越好,一根很粗的导线比一根很细的导线要

    强得多。这是地球的优势,它的确非常非常大。

    要用地球做导体,并不是把一根小细线插到马铃薯旁边的地里就可以

    了。你还必须使用某种东西以维持和地球的真正接触,这也就是需要一

    个大面积的导体。一个很好的解决办法是用一根至少8英尺长,12英寸

    粗的粗铜柱,它能提供与地面150平方英寸的接触。你可以用一个大锤

    子把它砸进地下,然后再接一根导线。如果你家的水管是铜质的,且从

    房子外的地下接进来的话,那么你只要把一根导线与水管相连就可以

    了。

    与地球的电性连接(也就是我们常说的接地)在英国叫earth,在美国叫

    ground。用ground可能会引起一点点儿误会,因为它也经常用来指电路

    的公用部分。本章除非特别声明,否则ground都指与地球的物理连接。

    画电路图时常用下面这个符号表示接地:

    电气工程师们使用这个符号是由于他们不喜欢费时间画一个埋在地下的

    8英尺长的铜柱。

    让我们来看看它是怎么工作的。从分析单回路开始:如果你使用的是高压电池和大灯泡,你只需要在你和你朋友的房子之间

    接一根导线,因为你可以用大地来做导体:

    当你断开开关,电子的流动如下图所示:

    电子从你朋友房子的地下出发,通过灯泡、导线和你房间里的开关,然

    后进入电池的正极。电子由电池的负极进入地下的。

    也许你还真的很想看到电子从埋在你家后院的8英尺长的铜柱进入地

    下,飞速地通过大地到达埋在你朋友家后院的铜柱。

    但是当你考虑到地球在为世界上数以千计的电路完成此功能时,你也许

    会问:这些电子怎么知道该到哪儿去呢?显然它们不知道。这里要用地

    球的一个特殊性质来解释。

    是的,地球是一个巨大的导体,但它同时也是电子的来源和仓库。地球

    对于电子而言就好像大海对于水滴而言。地球的确是电子无尽的源头,也是电子巨大的存储池。

    但是地球也有电阻,这就是为什么如果用1.5伏的D号电池和手电筒灯泡

    就不能用接地来减少电路开支的原因。地球对于低电压电池而言电阻实

    在太大了。你可能注意到上面两张画了电池的图中,电池的负极接地了:

    以后将不再画接地的电池,而用代表电压的字母V来代替它。单回路灯

    泡电报机现在如下图所示:

    V代表电压,但它也可以表示吸取器。把V看成电子吸取器,把大地看

    成电子的海洋,电子吸取器从地下吸取电子,放入回路,使之工作(比

    如点亮灯泡)。接地有时也被看成零电势,意味着没有电压存在。电压

    —像早先解释的—是一种电势能,就像悬浮的砖块具有势能一样。零电

    势就好像摆在地上的砖块—它不能再往什么地方掉下去了。

    在第4章中,我们注意到的一件首要的事情是电路是一个回路。新电路

    看起来一点儿都不像回路,但它仍然是回路。你可以用负极接地的电池

    代替V,然后用一根线把所有有接地符号的地方连起来,你将得到与本

    章开始时一样的电路图。

    因此,通过一对铜柱(或是自来水管)的帮助,可以只用两根跨越你和

    你朋友房子之间篱笆的导线就建立起了双向摩尔斯电码系统:这个电路与先前的三线配置电路功能相同。

    本章已经迈出了通信改革中的关键性一步。最初,我们只能通过直线视

    觉和在手电筒的可见范围内进行摩尔斯电码通信。

    使用电线,不仅突破了直线视觉的限制,而且通过建立系统来绕过拐弯

    进行通信,我们还摆脱了距离的限制。只要搭造更长更长的线路,就可

    以越过成百上千英里进行通信。

    对了,这还不太准确。尽管铜是电学上很好的导体,但它不是最完美

    的。导线越长,电阻越大;电阻越大,电流越小;电流越小,灯泡越

    暗。

    那么导线可以造多长呢?因情况而定。假设你正在使用原来四根线的双

    向电路,无接地和公用,并且还用手电筒和灯泡。为了节省开支,你先

    从电器行买了一些20号规格的电话线,每100英尺9.99。电话线是用来

    连接你的扩音器和立体声系统的。它有两根导线,因此它是电报系统的

    上佳选择。如果你的卧室与你朋友的卧室不到50英尺远,只用一捆电话

    线就够了。

    美国的导线粗细规格为AWG。AWG数越小,导线越粗,电阻越小。你

    所买的20号规格电话线直径大约0.032英寸,每1000英尺大约10欧姆电

    阻,这样对于卧室之间100英尺长的回路电阻为1欧姆。

    这并不坏,但如果要连上英里的线呢?线的总电阻将达到100欧姆以

    上。回想一下上一章中,灯泡电阻仅为4欧姆。利用欧姆定律,可以很

    容易地计算出电路中的电流不再是以前的0.75安(3伏除以4欧),而是

    比0.03安还小(3伏除以100欧以上)。几乎可以肯定,电流的大小不够

    点亮灯泡。使用粗线是一个很好的解决方法,但价格太昂贵。10号规格线(电器行

    的汽车电路耦合线价格为每35英尺11.99,而且你需要双倍长度因为它

    只有单线)大约0.1英寸粗,1000英尺为1欧姆,即1英里5欧姆。

    另一个解决办法是增加电压,使用大电阻灯泡。比如使用120伏电压的

    100瓦家用照明灯泡的电阻为144欧姆。电线的电阻对于整个电路电流的

    影响将大大减小。

    接下来的是150年前,人们在美洲和欧洲之间搭建第一个电报系统时所

    面临的问题。不管电线多粗,电压多高,电报线还是不能无限延长。根

    据计划,工作系统的极限为200英里。这与纽约和加利福尼亚间的上千

    英里距离相差太多。

    这个问题的答案-不是为手电筒,而是为过去的嘀嗒电报—虽说是一个

    简单易行的设备,但是通过它,整个计算机得以构造。 第6章发报机与断电器

    1791年,萨缪尔·摩尔斯生于马萨诸塞州的查尔斯顿镇,该镇是邦克山

    之战的地点,也是波士顿东北重镇。摩尔斯出生那年,美国宪法刚实施

    两年,乔治·华盛顿出任美国第一个任期的总统职务。Catherine大帝统

    治俄国。路易十六世和Marie Antoinette在两年后的法国大革命中被送上

    断头台。1791年,莫扎特完成了《魔笛》,他的最后一部作曲,次年于

    35岁时去世。

    摩尔斯在耶鲁受过教育,又在伦敦学过艺术,他是位著名的肖像画家。

    他的作品《General Lafayette》(1825)珍藏于纽约市政大厅。1836年,他

    曾参与过竞选纽约市市长且获得了5.7%的选票。他也是早先的摄影术狂

    热爱好者。他从Louis Daguerre本人那儿学习了银版相片的制作,制造

    出了美国第一批用银版照相术制成的相片,1840年,他把这个手艺传授

    给了17岁的Mathew Brady。此人以及他的同事后来为美国内战、亚伯拉

    罕·林肯和摩尔斯本人留下了一些很有纪念价值的照片。

    这些只是一个多职业生涯者的足迹。摩尔斯最著名的贡献在于他发明了

    电报和以他名字命名的编码。

    世界范围内的即时通信我们已经很熟悉,但它是当今新技术发展的结

    果。19世纪早期,你可以即时通信和远距离通信,但不能同时达到两个

    要求。即时通信只能限制在你的声音能达到(没有扩音器可用)或是你

    的眼睛能看到(也许得用望远镜)的范围;远距离通信则要花时间用信

    件通过马车、火车或者轮船的方式来实现。

    在早于摩尔斯发明的年代里,人们曾做过许多加速远距离通信的尝试。

    一种技术上简单的方法是雇佣一批人接力,站在山顶上用旗语信号通

    信。技术上稍微复杂一点儿的方法是使用巨大的带有可动手臂的装备,原理与旗语相同。

    电报思想的正式成形是在19世纪早期。1832年在摩尔斯开始试验之前,已经有其他科学家在做一些试探。原理上讲,电报思想很简单:你在线

    的一端做某些事引起线的另一端发生了某些事。这正是上一章用远距离

    手电筒所做的事情。但摩尔斯不可能使用灯泡作为他的信号设备,因为

    实用性灯泡直到1879年才发明出来。摩尔斯使用的是电磁现象。如果你取一只铁棒,用细导线将它绕几百圈,然后让电流通过导线,铁

    棒变成了磁铁,这时它就能吸引其他的铁和钢。(电磁铁上细线的电阻

    足够大以防止电磁铁形成短路。)移开电流,铁棒的磁性消失:

    电磁铁是电报的基础。一端上开关的闭合引起另一端上的电磁铁产生一

    些动作。

    摩尔斯最早的电报机比后来改进的要复杂得多。摩尔斯认为电报系统应

    该在纸上实际写点儿什么(这就像后来的电脑使用者描述的“生成一个硬

    拷贝”)。这当然不必是文字,因为文字太复杂,但某些字符应该记录下

    来,或曲线或点或划。注意,摩尔斯坚持要用纸记录下发报内容的这种

    想法,与Valentin Haüy要求盲人书籍应该使用突起的字母文字一样。

    尽管摩尔斯早在1836年就告知专利局他已经成功地发明了电报,但直到

    1843年,他才说服议会为此设备的示范表演出资赞助。1844年5月24日

    是有历史意义的一天,Washington和马里兰州巴尔的摩之间的电报线成

    功地传送了圣经上的一句话“What hath God wrought!”。

    传统电报机发送消息的核心部分如下图所示:尽管外观比较怪,但它只是一个为高速开合(闭)设计的开关,称

    为“按键按钮”。长时间按键最舒适的方式是在手掌的拇指、食指和中指

    之间握住把手,然后敲击。短时间敲击形成摩尔斯电码的点,长时间敲

    击形成摩尔斯电码的划。

    线的另一端是一个接收机,其基本结构是一个电磁铁吸拉一根金属拉

    杆。起初电磁铁控制的是一支笔,当由小装置控制的机械通过弯曲的弹

    簧缓慢地拖拉一卷纸时,相连的笔上下蹦弹将点划记录在纸上,懂得摩

    尔斯电码的人再将点划翻译成字母和文字。

    当然,人是会偷懒的。电报机使用者很快发现只要简单地利用笔跳上跳

    下的声音他们就能翻译编码。笔的装置最终被撤消,代替的是传统电报

    机的发声装置,称为“发声器音响器”,结构如下:当电报机的键按下时,发生器的电磁铁将可动棒拖下发出“滴”的声音;

    当键放开时,棒弹回初始位置,发出“嗒”的声音。快速的“嘀嗒”为点,慢速的则为划。

    按键、发声装置,电池和一些导线可像上一章所述手电筒电报一样连接

    起来:

    我们已经知道,两个电报站之间不需要两根线。如果大地作为另一半回

    路的话,一根线就足够了。

    如上一章所做,我们用字母V代替接地的电池,因此最终的单向设置如

    下图所示:

    双向通信只不过再需要一个按键和发生器。与上章所做相似。

    电报的发明真正标志着现代通信的开始。人类首次能够在眼、耳的范围

    之外以快于马奔跑的速度通信。发明中使用的二元码是其精华所在,但

    在后来的电子和无线电通信中,包括电话、收音机和电视,二元码都没

    有用到,只到最近二元码才出现在计算机、CD盘、DVD盘、数字卫星

    电视广播和高清晰电视中。

    摩尔斯的电报机战胜了其他设计,部分原因是它对不好的电线状态的容

    忍度比较大。假如你在按键和发声装置之间接一根线,该电报机通常可以工作,但其他电报系统却不具备这样的容忍性。但正如上章所谈及

    的,最大的问题在于长距离导线的电阻。尽管一些电报线使用高达300

    伏的电压能在300英里的范围内工作,导线还是不能无限延伸。

    一个明显的解决办法是使用转发(中继)系统,也称继电器系统。大约

    每200英里就让某位发报者通过发声装置接收消息再用按键发送出去。

    现在想像一下你已被某电报公司雇佣为转发系统的工作人员。他们把你

    放在纽约和加利福尼亚之间某个地方的一间简陋得只有一张桌子和一把

    椅子的小屋里。一根导线从东边的窗户进来连到发声装置上。你的按键

    连在电池和从西边窗子出去的导线上。你的工作是接收来自于纽约的消

    息然后把它们发送到加利福尼亚。

    起初,你是接收了整条消息后再转发它。你记录下发声器的嘀嗒,到消

    息接收结束,你再用你的按键将它们发送出去。最终你掌握了边听边发

    的技巧而不用把整条信息记录下来,这节约了转发时间。

    某天你在转发消息时,你注意到铁棒上下跳动又注意到了手指按动键的

    上下跳动。你看了看发声器又看了看键,然后你意识到棒的上下跳动与

    按键的上下跳动是一致的,于是你出去取回一根小木条,用这根木条和

    一些线把发声器和按键连接了起来:

    现在它可以自动工作了,你可以去喝下午茶也可以去钓鱼了。

    这只是一个趣味情景的想像。但实际上,摩尔斯很早就理解这个装置的

    思想。我们已经发明的这个装置叫重发器或继电器。一个继电器就像一

    个发声装置,输入的电流形成电磁用以拖动金属杆,金属杆作为开关的

    一个部分连接到外接的导线上。这样,微弱的输入电流被扩大形成比较

    强的输出电流。继电器的概要描述如下图所示:

    输入电流激发电磁铁,电磁铁吸引一根有弹性的金属条作为开关从而输

    出电流:因此电报按键、继电器和发声器大致连接如下:

    继电器是一种卓越的设备。它是一个开关,但并不是由人工而是借助于

    电流进行开关操作的。利用这种设备可以做出令人惊奇的事情。事实

    上,你可以用继电器装配出一台计算机中的大部分部件。

    是的,继电器这种设备是一种很好的发明,足以与电报相提并论。后面

    还将会用到,且它会变得非常小巧、方便。但是,在能够使用它之前,得先学会数数。 第7章十进制记数法

    语言仅仅是一种编码的想法似乎很容易被人们接受,很多人在学生时代

    至少学过一种外语,因此,我们知道在英语中“cat”(猫)也可以被叫作

    gato、chat、Katze、KOIIIK或kapa。

    然而,数字不那么容易随文化的不同而改变。不论那种语言,也不管怎

    样读那些数字,地球上我们能够遇到的几乎所有的人都用同样的方式来

    写数字:

    1 2 3 4 5 6 7 8 9 10

    数学,从某种意义上来说是不是可以称得上是一种世界语言呢?

    毫无疑问,数字是我们平时能够接触到的最抽象的代码。当你看到数

    字“3”时并不需要立即将它和任何事情相联系。你可能将它设想为3个苹

    果或者3个其他什么东西,但是当你从上下文中得知这个数字是指某个

    小孩的生日、电视频道、曲棍球比赛的得分或者是制作蛋糕的食谱中提

    供的需要面粉的杯数时,也能够像认为它代表3个苹果时一样自然。因

    为数字一开始产生时就很抽象,所以让我们理解这些苹果:

    并不一定要用符号“3”来表示就更困难了。本章的很大一部分以及下一

    章将来讲解这些苹果:

    也可以用“11”的形式来表示。

    先不讨论数字10与生俱来的特殊性。大多数人使用的数字系统是基于10(有时候是5)的,这种情况并不奇怪。最初人们是用手指来数数

    的。要是人类进化成有8个或12个手指,人类计数的方式就会有所不

    同。英语Digit(数字)这个单词也可以指手指或脚趾,单词five(五)

    和单词fist(拳头)有相同的词根,这种情况并不是巧合。

    这样看来,人类选择使用以10为基础的记数方法(或称为十进制记数

    法)完全是任意的,但我们赋予10的整数次幂重大的意义,并给它们命

    名:十个一年是一个十年;十个十年是一个世纪;十个世纪是一个千

    年;千个一千是百万;千个百万是十亿。下面是10的各次幂:

    10 1

    =10

    10 2

    =100

    10 3

    =1000(千)

    10 4

    =10000

    10 5

    =100000

    10 6

    =1000000(百万)

    10 7

    =10000000

    10 8

    =100000000

    10 9

    =1000000000(十亿)

    多数历史学家认为数字最初创造出来是用来数东西的,比如:人数、财

    产数、商品交易量等。举个例子来说,假定某个人有4只鸭子,他可能

    画4只鸭子作为记录:

    后来,专门负责画鸭子这项工作的人想:“我为什么一定要画4只鸭子呢?为什么不能只

    画1只鸭子,然后用其他方法(管它用什么方法,哪怕用一条竖线来代

    表一只鸭子)来表示有4只呢?”

    但若某人有27只鸭子,用画竖线来表示鸭子只数的方法就显得很荒谬

    了:

    于是,有人想到得有一种好的办法才行,数字系统就这样诞生了。

    在早期的数字系统中,只有罗马数字系统沿用至今。钟表的表盘上常常

    使用罗马数字,此外它还用来在纪念碑或雕像上标注日期、标注书的页

    码,或作为提纲条目的标记。最令人惊奇的是罗马数字常用在电影中做

    版本说明。(只要你有足够快的速度将字幕结尾处出现的MCMLIII译

    码,通常情况下就可以回答“这部影片是什么时候拍的”这个问题。)

    27只鸭子可以用罗马数字这样表示:

    这里用到的概念非常简单:X代表10条竖线,V代表5条竖线。

    现在仍在使用的罗马数字有:字母I代表一个一,这可能来自于一条竖线或者伸出的一个手指。字母V

    很可能是一只手的符号,代表五;两个字母V组成字母X,代表十;字

    母L代表五十;字母C来自于拉丁文中表示一百的单词 - centum;字母D

    代表五百;最后,字母M来自拉丁文中的单词—mille,代表一千。

    也许你不一定同意,很长一段时间以来,罗马数字被认为用来做加减运

    算非常容易,这也是罗马数字能够在欧洲被长期用于记帐的原因。事实

    上,当对两个罗马数字进行相加运算时,只需将这两个罗马数字的所有

    符号合并然后用下面的方法将其简化:五个I是一个V,两个V是一个

    X,五个X是一个L,等等。

    但使用罗马数字做乘除法是很难的。很多其他早期的数字系统(比如古

    希腊数字系统)和罗马数字系统相似,它们在做复杂运算时存在一定的

    不足。尽管如此,古希腊人所发明的非凡的几何学至今仍是中学的一门

    课程,古希腊人不是以代数享誉世界的。

    我们现在使用的数字系统通常称为阿拉伯数字系统,或称为印度—阿拉

    伯数字系统。它起源于印度,但由阿拉伯数学家传入欧洲。一位著名的

    波斯数学家 – Muhammed ibn-Musaal-Khwarizmi(由它的名字得到单词

    algorithm(算法))在大约公元825年写了一本代数书,书中用的就是

    印度的数字系统(阿拉伯数字)来计数。产生于公元1120年的拉丁文译

    本对整个欧洲用现在的阿拉伯数字代替当时使用的罗马数字的过渡过程

    产生了很大的影响。

    印度-阿拉伯数字系统与先前的数字系统相比在以下三个方面不同:

    ·印度-阿拉伯数字系统是和位置相关的,也就是说,一个数字依据位置

    的不同代表不同的数量。数字的位置和数字的大小一样,都是很重要

    的。(但实际上,数字的位置更重要。)100和1000000中都只有一个

    1,但我们知道一百万比一百要大得多。

    ·几乎所有早期的数字系统都有一个阿拉伯数字所没有的东西,那就是

    用来表示数字10的一个专门的符号。现在使用的数字系统中是没有代表

    10的专门符号的。

    ·另一方面,几乎所有早期的数字系统都缺少一个阿拉伯数字中有的,而且事实证明是比代表数字10的符号重要得多的符号,那就是零。是的,就是零。这个小小的零毫无疑问是数字和数学历史上最重要的发

    明之一。它支持位置表示法,因为它可以将205与250区别开来。数字零

    也使得与位置无关的数字系统中非常复杂的运算变得简单,尤其是乘除

    法。

    印度-阿拉伯数字的整体结构是以读它们的方式展现的。拿4825作为例

    子,我们把它读作“四千八百二拾五”,意思是:

    四个一千

    八个一百

    两个十

    一个五

    或者,可以将它的组成写成这样:

    4825=4000+800+20+5

    或者,可以将它进一步分解,写成这样:

    4825=4×1000+

    8×100+

    2×10+

    5×1

    另外,也可以使用10的整数次幂的形式,重新写成:

    4825=4×10 3

    +

    8×10 2

    +

    2×10 1

    +

    5×10 0记住,任何数的0次幂都等于1。

    多位数中的每位都有特定的意义,如下图所示。这7个方格可以表示从0

    ~99999999的任何一个数字:

    每一个位置(位)与10的一个整数次幂相对应。不需要一个专门的符号

    来表示数字10,因为可以将1放在不同的位置,用0作为占位符。

    分(小)数可以同样的形式作为数字放在十进制数的小数点的右边,这一

    点非常好。数字42705.684是:

    4×10000+

    2×1000+

    7×100+

    0×10+

    5×1+

    6÷10+

    8÷100+

    4÷1000该数也可以写成不带除法的形式,如下:

    4×10000+

    2×1000+

    7×100+

    0×10+

    5×1+

    6×0.1+

    8×0.01+

    4×0.001

    或写成10的整数次幂的形式:

    4×10 4

    +

    2×10 3

    +

    7×10 2

    +

    0×10 1

    +

    5×10 0

    +

    6×10 -1

    +

    8×10 -2

    +

    4×10 -3

    注意10的指数是怎样变到零再变成负数的。

    我们知道,3加上4等于7。同样,30加上40等于70,300加上400等于700,3000加上4000等于7000。这正是阿拉伯数字系统的“魅力”所在,无论你进行多长的十进制的加法,只要根据一种方法将问题分成几步即

    可。每一步最多只是将两个一位数字相加,这也是很久以前有人强迫你

    记加法表的原因:

    从最上边的一行和最左边的一列找到要相加的两个数字,在行与列的交

    叉点上找到它们相加的结果。例如,4加上6等于10。

    同样,做两个十进制数相乘的运算时,方法可能稍稍复杂一点儿,但仍

    然只需将问题分成几步,这样就不会比做加法和一位数的乘法更复杂

    了。你在小学时可能也必须记住下面的乘法表:与位置相关的记数系统的优点不在于它多么好用,而在于当它用在不是

    十进制的系统中时,也一样的好用。我们现在用的数字系统不一定适合

    所有的人。十进制数字系统的一个很大问题就在于它和卡通人物没有任

    何关系。大多数的卡通人物每只手上只有4个手指,因此它们喜欢基于8

    的数字系统(八进制)。有趣的是,我们所知的大部分关于十进制数的

    知识同样可以用于卡通朋友所喜爱的八进制数字系统中。 第8章其他进位制记数法

    10对我们来说是一个非常重要的数字。10是我们大多数人拥有的手指或

    脚趾的数目,我们当然希望所有人的手指脚趾都是10个。因为我们的手

    非常适合数数,因而我们人类已经适应了以10为基础的数字系统:

    前面数章已经提到过,通常使用的数字系统称为以10为基础的数字系统

    或十进制。这个数字系统对我们来说非常自然,因而我们很难想像出还

    有其他的数字系统。事实上,当我们看到数字10的时候,不由自主地就

    会认为这个数是指下面这么多只鸭子:

    但是,数字10是指这么多只鸭子的唯一理由是因为这么多只鸭子与我们

    的手指数目相同。如果人类不是有那么多只手指,我们数数的方式就会

    有所不同,数字10就可能代表别的东西了。同样是数字10,可以指这么

    多只鸭子:或这么多只鸭子:

    甚至可以是这么多只鸭子:

    当我们明白了10可以指只有两只鸭子的时候,也就可以解释开关、电

    线、灯泡、继电器(或干脆就叫计算机)是怎样表示数字的了。

    如果人类像卡通人物那样,每只手上只有4个手指会怎样呢?我们可能

    永远都不会想到要发明一种以10为基础的数字系统的问题,取而代之的

    是我们可能会认为数字系统基于8是正常、自然、合理、必然的,是毫

    无疑问的,是非常合适的。这时,就不能称之为十进制了,得将它称作

    为以8为基础的数字系统或八进制。

    如果数字系统是以8为基础组织起来的,就不需要这样的一个符号:

    9

    把这个符号拿给任何一个卡通人物看,都会有同样的反应:“那是什

    么?它是干什么用的?”如果再仔细想一会儿的话,你会发现连这样的

    一个字符也不需要:

    8

    在十进制数字系统中,没有专门用来表示10的符号,所在在八进制数字

    系统中,也没有专门用来表示10的符号。

    在十进制数字系统中数数的方式是0、1、2、3、4、5、6、7、8、9,然

    后是10。在八进制数字系统中数数的方式是0、1、2、3、4、5、6、7,然后是什么呢?我们已经没有符号可用了,唯一的一个有意义的可用符

    号是10,的确是那样。在八进制数中,7之后紧接着的数字是10,但是10并不是指人类的手指那么多的数目。在八进制数中,10指的是卡通人

    物手指的数目:

    继续数脚趾头:

    使用非十进制的数字系统时,将数字“10”读作“么零”可以避免一些混

    淆。同样,“13”可以读作“么三”,“20”可以读作“二零”。要想真正避免

    混淆,可以将“20”读作“八进制二零”或“基于8的数二零”。

    即使没有手指和脚趾帮忙,我们仍能够将八进制数继续数下去。除了要

    跳过那些含有8或9的数字以外,它基本上和数十进制的数是一样的。当

    然,相同的数字代表的数量是不同的:最后一个数字读作“么零零”,是卡通人物拥有的手指数自乘的结果(即

    平方)。

    在写十进制或八进制数时,为避免混淆,可以借助使用特定的标记以区

    别表示数字系统。下面用标记“TEN”表示十进制数,标记“EIGHT”表示

    八进制数。

    这样,白雪公主遇到的小矮人的数目是7 TEN

    或7 EIGHT

    卡通人手的手指数是8 TEN

    或10 EIGHT

    贝多芬写的交响乐的首数是9 TEN

    或11 EIGHT

    人的手指的数目是10 TEN

    或12 EIGHT

    一年中的月份数是12 TEN

    或14 EIGHT

    两个星期所包含的天数是14 TEN

    或16 EIGHT

    “情人”的生日庆祝会是16 TEN

    或20 EIGHT

    一天中所包含的小时数是24 TEN

    或30 EIGHT

    拉丁字母表中的字符数是26 TEH

    或32 EIGHT

    与一夸脱液体相当的盎司数为32 TEN

    或40 EIGHT一副牌中含有的牌数是52 TEN

    或64 EIGHT

    国际象棋棋盘的方格数是64 TEN

    或100 EIGHT

    Sunset Strip最著名的17牌号是77 TEN

    或115 EIGHT

    美式足球场的面积是100 TEN

    或144 EIGHT

    参加温布尔登网球公开赛女单初赛的人数是128 TEN

    或200 EIGHT

    古埃及孟斐斯城市面积的平方英里数是256 TEN

    或400 EIGHT

    注意,在上面一系列的八进制数中,有一些好整数,像100 EIGHT

    、200

    EIGHT

    、400 EIGHT。好整数通常是指结尾有一些零的数。在结尾处有两个

    零的十进制数意味着它是100 TEN

    即10 TEN

    乘以10 TEN;在八进制数中,结

    尾处有两个零表示它是100 EIGHT

    即10 EIGHT

    乘以10 EIGHT

    (或8 TEN

    乘以8 TEN

    ,等于64 TEN)。

    你可能已经注意到了,好的八进制整数100 EIGHT

    、200 EIGHT

    和400 EIGHT

    与

    十进制数64 TEN

    、128 TEN

    、256 TEN

    相等,它们都是2的整数次幂。例如,400 EIGHT

    等于4 EIGHT

    乘以10 EIGHT

    乘以10 EIGHT

    ,所有这些数都是2的整数次

    幂。任何时候,将2的整数次幂和另一个2的整数次幂相乘,得到的仍是

    2的整数次幂。

    下表给出了一些2的整数次幂的十进制及其对应的八进制的表示形式:最右边一列的好整数给我们一个暗示:十进制以外的数字系统可能对使

    用二元码有所帮助。

    八进制数字系统和十进制数字系统在结构上没有什么差别,只是在细节

    上有一些差异。例如,八进制数的每一个位置代表的值是该位数字乘以

    8的整数次幂的结果:这样,八进制数3725 EIGHT

    可以拆分成这样:

    3725 EIGHT

    =3000 EIGHT

    +700 EIGHT

    +20 EIGHT

    +5 EIGHT

    还可以写成另外几种不同的形式。下面就是其中的一种,采用十进制形

    式的8的整数次幂:

    3725 EIGHT

    =3×512 TEN

    +

    7×64 TEN

    +

    2×8 TEN

    +

    5×1

    采用八进制形式的8的整数次幂的情况:

    3725 EIGHT

    =3×1000 EIGHT

    +

    7×100 EIGHT

    +

    2×10 EIGHT

    +

    5×1

    还有另外的一种拆分形式:

    3725 EIGHT

    =3×8 3

    +7×8 2

    +

    2×8 1

    +

    5×8 0

    如果算出其十进制的结果,会得到2005 TEN。这就是将八进制数转换成

    十进制数的方法。

    可以采用与做十进制加法和乘法相同的办法来做八进制数的加法和乘

    法。唯一真正的区别在于要采用不同的表格来对各个数字进行乘法或加

    法运算。下面是八进制数的加法表:

    例如,5 EIGHT

    +7 EIGHT

    =14 EIGHT。可以采用与做十进制加法相同的方法将

    两个稍长一点儿的八进制数相加:

    先从最右边的一列做起,5加上3等于10,该位写下0,向前进1;1加3加

    4等于10,该位写下0,向前进1;1加1加6等于10。同样,在八进制中,2乘以2仍然等于4。但是3乘以3却不等于9,那是多

    少呢?3乘以3等于11 EIGHT

    ,此数与9 TEN

    所代表的数量相等。下图是完

    整的八进制数的乘法表:

    这里,4×6等于30 EIGHT

    ,也即表明30 EIGHT

    和4×6的十进制结果24TEN是

    等值的。

    八进制数字系统与十进制数字系统一样,都是有效的,但八进制数字系

    统在理解上更深了一层。既然我们已为卡通人物开发出了一套数字系

    统,就再给龙虾开发一套适合它们用的数字系统吧。龙虾根本没有手

    指,但它两只前爪的末端都有螯。适合于龙虾的数字系统是四进制数字

    系统或称为基于4的数字系统:四进制数可以这样来数:

    0、1、2、3、10、11、12、13、20、21、22、23、30、31、32、33、100、101、102、103、110,等等。

    这里不打算在四进制数上花太多的时间,因为还有更重要的事情要做。

    但我们还是要看一下四进制中的每一位是怎样和4的某个整数次幂相对

    应的:

    四进制数31232可以写成:

    31232 FOUR

    =3×256 TEN

    +

    1×64 TEN

    +

    2×16 TEN

    +3×4 TEN

    +

    2×1 TEN

    也可以写成:

    31232 FOUR

    =3×10000 FOUR

    +

    1×1000 FOUR

    +

    2×100 FOUR

    +

    3×10 FOUR

    +

    2×1 FOUR

    还可以写成:

    31232 FOUR

    =3×4 4

    +

    1×4 3

    +

    2×4 2

    +

    3×4 1

    +

    2×4 0

    如果以十进制数的形式计算其结果,就会发现31232 FOUR

    等于878 TEN。

    现在,我们要做一个跳跃并且是最远的一跳。假定我们是海豚,并且必

    须用两鳍来数数。则这个数字系统就是基于2的数字系统或二进制的。

    这样似乎只需要两个数字,即0和1。

    现在,0和1已是你要处理的全部问题,需要练习一下才能习惯使用二进

    制数。二进制数最大的问题是数字用完得很快。例如,下图是海豚怎样

    用它的鳍数数的例子:是的,在二进制中,1后面的数字是10。这是令人惊讶的,但也并不奇

    怪。无论使用哪种数字系统,当单个位的数字用完时,第一个两位数字

    都是10。在二进制系统中,可以这样来数数:

    0、1、10、11、100、101、110、111、1000、1001、1010、1011、1100、1101、1110、1111、10000、10001、??

    这些数看起来好像很大,实际上并不是这样。更准确地说二进制数长度

    增长的速度要快过二进制数增大的速度:

    每个人的头的个数为1 TEN

    或1 TWO

    海豚身上的鳍的个数为2 TEN

    或10 TWO

    一个大汤匙中包括的小茶匙的数目为3 TEN

    或11 TWO

    正方形的边数为4 TEN

    或100 TWO

    每个人一只手的手指数为5 TEN

    或101 TWO

    一种昆虫的腿数为6 TEN

    或110 TWO

    一星期的天数为7 TEN

    或111 TWO

    八重奏中音乐家的个数为8 TEN

    或1000 TWO太阳系中的行星(包括冥王星在内)总数为9 TEN

    或1001 TWO

    牛仔帽重量以加仑计算为10 TEN

    或1010 TWO

    等等。

    在多位二进制数中,数字的位置和2的整数次幂的对应关系为:

    因此,任何时候由一个1后跟几个零构成的二进制数一定是2的整数次

    幂。2的幂与二进制数中零的个数相等。下面是扩充的2的各次幂的表,可用来说明这条规则:假定有一个二进制数101101011010,它可以写成:

    101101011010TWO=1×2048 TEN

    +

    0×1024 TEN

    +

    1×512 TEN

    +

    1×256 TEN

    +

    0×128 TEN

    +

    1×64 TEN

    +

    0×32 TEN

    +

    1×16 TEN

    +

    1×8 TEN

    +

    0×4 TEN

    +1×2 TEN

    +

    0×1 TEN

    也可以这样写:

    101101011010TWO=1×2 11

    +

    0×2 10

    +

    1×2 9

    +

    1×2 8

    +

    0×2 7

    +

    1×2 6

    +

    0×2 5

    +

    1×2 4

    +

    1×2 3

    +

    0×2 2

    +

    1×2 1

    +

    0×2 0

    如果将各个部分以十进制数的形式相加,得到

    2048+512+256+64+16+8+2=2906 TEN。

    将二进制数转换成十进制数非常简单,你可能更喜欢借助已准备好的模

    板进行转换:这个模板允许你转换最大长度为8的二进制数,但它扩充起来非常容

    易。使用时,将8个二进制数字放到上部的8个小盒子中,一个盒子放一

    个数字。做8个乘法运算,将结果分别放到底部的8个小盒子中。将8个

    盒子中的数字相加就得到最终结果。下面是将10010110转化成十进制数

    的例子:

    将十进制数转换成二进制数就没那么直接了。但这里也有一个帮助你将

    0~225范围内的十进制数转换成二进制数的模板:

    实际转化过程要表面上看的麻烦得多,所以一定要仔细按照下面的指导

    来做。将整个十进制数(应小于等于225)放在左上角的方格中。用除

    数(128)去除那个数(被除数),如下图所示。将商写在正下方的盒

    子中(即左下角的盒子中),余数写在右边的盒子中(即上面一行左数

    第二个盒子中)。用第一个余数再除以下一个算子64。依照模板的顺序

    用同样的方法继续做下去。

    记住,每次求得的商只能是0或者1。如果被除数小于除数,商为0,余

    数和被除数相等;如果被除数大于除数,商为1,余数为被除数与除数

    之差。下面是将150转换成二进制数的过程:如果要做两个二进制数的加法或乘法,也许直接采用二进制来做比转化

    成十进制再做还要简单。这将是你真正喜欢二进制数的地方。如果只需

    记住下面的二进制加法表就可以做加法运算,也就不难想象掌握加法运

    算该有多快:

    + 0 1

    0 0 1

    1 1 10

    用二进制加法表将两个二进制数相加:

    从最右边的一列开始做起:1加上0等于1;右数第2列:0加上1等于

    1;第3列:1加上1等于0,进位为1;第4列:1(进位值)加上0再加上0

    等于1;第5列:0加上1等于1;第6列:1加1等于0,进位为1;第7列:

    1(进位值)加上1再加上0等于10。

    乘法表比加法表更简单,因为该表可以由两个基本的乘法规则推导出

    来:零乘以任何数都等于0,1与任何数相乘仍是那个数本身:

    × 0 1

    0 0 0

    1 0 1

    下面是13 TEN

    与11 TEN

    以二进制数的形式做乘法的过程:最后结果是143 TEN。

    人们在使用二进制数的时候通常将它们写成带有前导零的形式(即第一

    个1的左边有零)。例如,0011而不写成11。这些零不会改变数字的

    值,只是起到一些装饰作用。例如,下面是二进制的前16个数以及和它

    们等值的十进制数:

    二进制数 十进制数

    0000 0

    0001 1

    0010 2

    0011 3

    0100 4

    0101 5

    0110 6

    0111 7

    1000 8

    1001 9

    1010 101011 11

    1100 12

    1101 13

    1110 14

    1111 15

    让我们再仔细看看这些二进制数字。考虑一下这4个垂直列中每一列的0

    和1,注意它们在一列中自上而下是以怎样的规律变化的:

    ·最右边一列一直在0和1之间相互替换。

    ·右数第2列在两个0和两个1之间相互替换。

    ·右数第3列在四个0和四个1之间相互替换。

    ·右数第4列在八个0和八个1之间相互替换。

    这是很有规律的,难道不是吗?事实上,只要再重复这16个数字并且在

    每个数字的前面放一个1就可以很容易地写出后面的16个数字:

    二进制数 十进制数

    10000 16

    10001 17

    10010 18

    10011 19

    10100 20

    10101 21

    10110 2210111 23

    11000 24

    11001 25

    11010 26

    11011 27

    11100 28

    11101 29

    11110 30

    11111 31

    下面是看待这些数字的另一种方式:在数二进制数的时候,最右边的数

    字(也称最低位数字)是在0和1之间变化的。当它每次从1变到0时,右

    数第二位数字(也称次低位数字)也要发生变化,或者从0变到1,或者

    从1变到0。每次只要有一个二进制数位的值由1变到0,紧挨着的高位数

    字也会发生变化,要么从0变到1,要么从1变到0。

    我们在写十进制中比较大的数字时,通常每三个数字之间留一点儿空

    隙,这样,我们一看就知道这个数的大概数值。例如,当你看到数字

    12000000时,你可能不得不去数其中0的个数,但如果看到的是

    12000000,则马上就能知道是一亿两千万。

    二进制数的位长度增加得特别快。例如,一亿两千万的二进制表示为:

    101101110001101100000000。为了让它更易读,通常是每四个数字之间

    用连字符或空格来分开。例如;1011-0111-0001-1011-0000-0000或

    101101110001101100000000。本书的后面会讲到更简单的二进制数的表

    示方法。

    通过将数字系统减少至只有0和1两个数字的二进制数字系统,我们已经

    在能够接受的范围内做了深入的讨论。不可能找到比二进制数字系统更

    简单的数字系统了。二进制数字系统架起了算术与电之间的桥梁。前面

    各章中,我们所看到的开关、电线、灯泡、继电器等物体都可以表示二进制数0和1:

    电线可以表示二进制数字。有电流流过电线代表二进制数字1;如果没

    有,则代表二进制数字0。

    开关可以表示二进制数字。如果开关闭合,代表二进制数字1;如果开

    关断开,代表二进制数字0。

    灯泡可以表示二进制数字。如果灯泡亮着,代表二进制数字1;如果没

    亮,代表二进制数字0。

    电报继电器可以表示二进制数字。继电器闭合,代表二进制数字1;继

    电器断开,代表二进制数字0。

    二进制数与计算机密切相关!

    大约在1948年,美国数学家John Wilder Tukey(生于1915年)提前认识

    到二进制数将在未来几年中随着计算机的流行而发挥更大的作用。他决

    定创造一个新的、更短的词来代替使用起来很不灵活的五音节词—

    binary digit。他曾经考虑用bigit或binit,但最后还是选用了短小、简

    单、精巧且非常可爱的单词bit(比特)来代替binary digit这个词。 第9章二进制数

    1973年,当安东尼·奥兰多在他写的一首歌中要求他挚爱的人“系一条黄

    色的绸带在橡树上”时,他并没有要求他的爱人进行繁琐的解释或冗长

    的讨论,只要求她给他一个简单的结果。他不去关心其中的因果,即使

    歌中复杂的感情和动情的历史在现实生活中重演,所有的人真正想知道

    的仅仅是一个简单的是或不是。他希望在树上系一条黄色的绸带来表

    示:“是的,即使你犯了很大的错,并且被判了入狱三年,我仍希望你

    回来和我一起共渡时光。”他希望用树上没有黄色的绸带来表示:“你连

    停在这里都别想。”

    这是两个界线分明、相互排斥的答案。奥兰多没有这样唱:“如果你想

    再考虑一下的话,就系半条黄色的绸带”或者“如果你不爱我但仍希望我

    们是朋友,就系一条蓝色的绸带吧”。相反,他让答案非常的简单。

    和黄色绸带的有无具有同样效果的另外几个例子(但可能无法用在诗

    里)是可以选择一种交通标记放在院外,可能是“请进”或“此路不通”。

    或者在门上挂一个牌子,上写“关”或“开”。

    或者用从窗口能够看到的一盏灯的亮灭来表示。

    如果你只需说“是”或“不是”的话,可以有很多种方式来表达。你不必用

    一个句子来表达是或不是,也不需要一个单词,甚至连一个字母都不

    要。你只要用一个比特,即只要一个0或1即可。

    正如我们在前面的章节中所了解到的,通常用来计数的十进制数事实上

    并没有什么与众不同的地方。非常清楚,我们的数字系统之所以是基于

    10的(十进制数)是因为我们有10个手指头。我们同样有理由使用八进

    制数字系统(如果我们是卡通人物)或四进制数字系统(如果我们是龙

    虾),甚至是二进制数字系统(如果我们是海豚)。

    但是,二进制数字系统有一点儿特别:它可能是最简单的数字系统。二

    进制数字系统中只有两种二进制数字—0和1。要是我们想寻求更简单的

    数字系统,只好把数字1去掉,这样,就只剩下0一个数字了。只有一个

    数字0的数字系统是什么都做不成的。

    “bit(比特)”这个词被创造出来代表“binary digit”,它的确是新造的和计算机相关的最可爱的词之一。当然,“bit”有其通常的意义:“一小部分,程度很低或数量很少”。这个意义用来表示比特是非常精确的,因为1比

    特 – 一个二进制数字位—确实是一个非常小的量。

    有时候当一个新词诞生时,它还包含了一种新的意思。bit这个词也是这

    样。1比特的意思超过了被海豚用来数数的二进制数字位所包含的意

    义。在计算机时代,比特已经被看作是组成信息块的基本单位。

    当然,上述说法不一定完全正确,比特并不是传送信息的唯一的方式。

    字母、单词、摩尔斯码、布莱叶盲文,十进制数字都可以用来传递信

    息。比特传递的信息量很小。1比特只具备最少的信息量,更复杂的信

    息需要多位比特来传递。(我们说比特传递的信息量小,并不是说它传

    送的信息不重要。事实上黄绸带对于与它相关的两个人来说是一个非常

    重要的信息。)

    “听,孩子们,你们很快就能听到Paul Revere午夜的马蹄声。”享利·朗费

    罗写道。尽管他在描述Paul Revere是怎样通知美国人英国殖民者入侵的

    消息时不一定与史实完全一致,但他的确提供了一个利用比特传递信息

    的令人茅塞顿开的例子:

    He said to his friend “if the British march

    By land or sea from the town to-night,Hang a lantern aloft in the belfry arch

    Of the North Church tower as a special light, -

    One, if by land, and two, if by sea…”

    (他告诉他的朋友:“如果英军今晚入侵,你就在北教堂的钟楼拱门上悬挂点亮的提灯

    作为信号。一盏提灯代表英军由陆路入侵,两盏提灯代表英军由海路入侵。??)也就是说,Paul Revere的朋友有两盏灯。如果英军由陆路入侵,他就挂

    一盏灯在教堂的钟楼上;如果英军由海路入侵,他就挂两盏灯在教堂的

    钟楼上。

    然而,朗费罗并没有将所有的可能都涉及到。他留下第三种情况没有

    说,那就是英军根本就没有入侵的情况。朗费罗已经暗示第三种可能的

    信息可以由不挂提灯的方式来传递。

    让我们假设那两盏灯是永久固定在教堂钟楼上的。在正常情况下,它们

    都不亮:这就是指英军还没有入侵。

    如果一盏提灯亮:表示英军正由陆路入侵。

    如果两盏提灯都亮:表示英军正由海路入侵。

    每一盏提灯都代表一个比特。亮着的灯表示比持值为1,未亮的灯表示

    比特值为0。前面奥兰多已经说明了传送只有两种可能性的信息只需要

    一个比特。如果Paul Revere只需被告知英军正在入侵(不管是从何处入

    侵)的消息,一盏提灯就足够了。点亮提灯代表英军入侵,未点亮提灯

    代表又是一个和平之夜。

    传递三种可能性的消息还需要再有一盏提灯。一旦再有一盏提灯,两个

    比特就可以通知有四种可能的信息:

    00=英军今晚不会入侵

    01=英军正由陆路入侵

    10=英军正由陆路入侵

    11=英军正由海路入侵

    Paul Revere将三种可能性用两盏提灯来传送的做法事实上是相当富有经

    验的。用通信理论的术语说,他采用了冗余的办法来降低噪声的影响。

    通信理论中的噪声是指影响通信效果的任何事物。电话线路中的静电流

    显然是影响电话通信的一种噪声。然而,即使是在有噪声的情况下,电

    话通信仍能够成功,因为口语中存在大量的冗余。你同样可以听懂对方

    的话而无需将每个音节、每个字都听得很清楚。在上述例子中,噪声是指晚上光线黯淡以及Paul Revere距钟楼有一定的

    距离,它们都阻碍了Paul Revere声将钟楼上的两盏灯区分清楚。下面是

    朗费罗的诗中很重要的一段:

    And lo! As he looks, on the belfry’s height

    A glimmer, and then a gleam of light!

    He springs to the saddle, the bridle he turns,But lingers and gazes, till full on his sight

    A second lamp in the belfry burns!

    (哦!他站在与钟楼等高的位置观察,一丝微光,然后,有一盏灯亮了!

    他跳上马鞍,调转马头,徘徊,凝视,直到看清所有的灯

    另一盏灯也亮了!)

    那当然不是说Paul Revere正在辨清到底是哪盏灯先亮的问题。

    这里最本质的概念是信息可能代表两种或多种可能性的一种。例如,当

    你和别人谈话时,说的每个字都是字典中所有字中的一个。如果给字典

    中所有的字从1开始编号,我们就可能精确地使用数字进行交谈,而不

    使用单词。(当然,对话的两个人都需要一本已经给每个字编过号的字

    典以及足够的耐心。)

    换句话说,任何可以转换成两种或多种可能的信息都可以用比特来表

    示。不用说,人类使用的很多信息都无法用离散的可能性来表示,但这

    些信息对我们人类的生存又是至关重要的。这就是人类无法和计算机建

    立起浪漫关系的原因所在(无论怎样,都希望这种情况不会

    发生)。如果无法将某些信息以语言、图片或声音的形式表达,那也不

    可能将这些信息以比特的形式编码。当然,你也不会想将它们编码。举手或不举手是一个比特的信息。两个人是否举手—就像电影评论家

    Roger Ebert和刚去世不久的Gene Siskel对新影片提供他们最终的评价结

    果那样—传递两个比特的信息。(我们将忽略掉他们实际上对影片做的

    评语,而只关心他们有没有举手的问题。)这样,我们用两个比特代表

    四种可能:

    00=他们都不喜欢这部影片

    01=Siskel讨厌它,Ebert喜欢它

    10=Siskel喜欢它,Ebert讨厌它

    11=Siskel和Ebert都喜欢它

    第一个比特值代表Siskel的意见,0表示Siskel讨厌这部影片,1表示

    Siskel喜欢这部影片。同样,第二个比特值代表Ebert的意见。

    因此,如果你的朋友问你Siskel和Ebert是怎么评价《Impolite

    Encounter》这部电影的,你不用回答“Siskel举手了,Ebert没有举手”或

    者“Siskel喜欢这部电影,Ebert不喜欢这部电影”,你可以简单地回答“么

    零”。你的朋友只要知道哪一位代表的是Siskel的意见,哪一位代表的是

    Ebert的意见,并且知道值为1代表举手,值为0代表没有举手,你的回答

    就是可以被人理解的。当然,你和你的朋友都要知道这种代码的含义。

    我们也可以一开始就声明值为1的比特位表示没有举手,值为0的比特位

    表示举手了,这可能有点违反常规。通常我们会认为值为1的比特位代

    表正面的事情,而值为0的比特位代表相反的一方面,这的确只是一种

    很随意的指派。无论怎样,用此种代码的人只要明白0、1分别代表什么

    就可以了。

    某一位或几位比特位的集合所代表的意义通常是和上下文相关的。橡树

    上的黄绸带可能只有系绸带的人和期望看到绸带的人知道其中的意思,改变绸带的颜色、系绸带的树或系绸带的日期,绸带可能会被认为只是

    一块毫无意义的破布。同样,要从Siskel和Ebert的手势中得到有用的信

    息,我们至少要知道正在讨论的是哪部影片。

    如果你保存了Siskel和Ebert对一系列影片的评价和投票结果,你就有可

    能在表示Siskel和Ebert意见的比特信息中再增加一位代表你自己的观点的比特位。增加的第三位使得其代表的信息可能性增加到8种:

    000=Siskel讨厌它,Ebert讨厌它,我讨厌它

    001=Siskel讨厌它,Ebert讨厌它,我喜欢它

    010=Siskel讨厌它,Ebert喜欢它,我讨厌它

    011=Siskel讨厌它,Ebert喜欢它,我喜欢它

    100=Siskel喜欢它,Ebert讨厌它,我讨厌它

    101=Siskel喜欢它,Ebert讨厌它,我喜欢它

    110=Siskel喜欢它,Ebert喜欢它,我讨厌它

    111=Siskel喜欢它,Ebert喜欢它,我喜欢它

    使用比特来表示信息的一个额外好处是我们清楚地知道我们解释了所有

    的可能性。我们知道有且仅有8种可能性,不多也不少。用3个比特,我

    们只能从0数到7,后面再没有3位二进制数了。

    在描述Siskel和Ebert的比特时,你可能一直在考虑一个严重的,并且是

    令人烦恼的问题—对于Leonard Maltin的MovieVideo Guide怎么办呢?

    别忘了,Leonard Maltin是不采用举手表决这种形式的,他对电影的评

    价用的是更传统的星级系统。

    要想知道需多少个Maltin比特,首先要了解一些关于Maltin评分系统的

    知识。Maltin给电影的评价是1~4颗星,并且中间可以有半颗星。(仅

    仅是为了好玩,他实际上不会给电影只评一颗星,取而代之的是给一个

    BOMB[炸弹]。)这里总共有七种可能性,也就是说只需要3个比特

    位就可以表示一个特定的评价等级了:

    000=BOMB

    001=★12

    010=★★011=★★12

    100=★★★

    101=★★★12

    110=★★★★

    你可能会问111怎么办呢,111这个代码什么意义都没有,它没有定义。

    如果二进制代码111被用来表示Maltin等级,那一定是出现错误了。(这

    可能是计算机出的错误,因为人不会给出这样的评分。)

    前面我们曾用两个比特来代表Siskel和Ebert的评价结果,左边的一位代

    表Siskel的评价意见,右边的一位代表Ebert的评价意见。在上述Maltin

    评分系统中,各个比特位都有确定的意义吗?是的,当然有。将比特编

    码的数值加2再除以2,就得到了Maltin评分中对应的星的颗数。这样编

    码是由于我们在定义代码时遵循了合理性和连贯性,我们也可以下面的

    这种方式编码:

    000=★★★

    001=★12

    010=★★12

    011=★★★★

    101=★★★12

    110=★★

    111=BOMB

    只要大家都了解代码的含义,这种表示就和前述代码一样,都是合理

    的。

    如果Maltin遇到了一部连一颗星都不值得给的电影,他就会给它半颗

    星。他当然有足够的代码来表示半颗星的情况,代码会像下面这样定

    义:000=MAJORBOMB

    001=BOMB

    010=★12

    011=★★

    100=★★12

    101=★★★

    110=★★★12

    111=★★★★

    但是,如果他再遇到连半颗星的级别都不够的影片并且决定给它没有星

    的级别(ATOMIC BOMB?),他就得再需要一个比特位了,已经没有

    3个比特的代码空闲了。

    《Entertainment Weekly》杂志常常给事物定级,除了电影之外还有电视

    节目、CD、书籍、CD-ROM、网络站点等等。等级的范围从A+~F,如果你数一下的话,发现共有13个等级。这样,需要四个比特来代表这

    些等级:

    0000=F

    0001=D-

    0010=D

    0011=D+

    0100=C-

    0101=C

    0110=C+0111=B-

    1000=B

    1001=B+

    1010=A-

    1011=A

    1100=A+

    有3个代码没有用到,它们是:1101、1110和1111,加上后总共是16个

    代码。

    只要谈到比特,通常是指特定数目的比特位。拥有的比特位数越多,可

    以传递的不同可能性就越多。

    对十进制数当然也是同样的道理。例如,电话号码的区号有几位呢?区

    号共有3位数字。如果所有的区号都使用的话(实际上有一部分区号并

    没有使用,将它们忽略),一共有10 3

    或1000个代码,从000~999。区

    号为212的7位数的电话号码有多少种可能呢?10 7

    或10000000个;区号

    为212并且以260开头的电话号码有多少个呢?10 4

    或10000个。

    同样,在二进制数中,可能的代码数等于2的比特位数次幂:

    比特位数 代码数

    1 2 1

    =2

    2 2 2

    =4

    3 2 3

    =8

    4 2 4

    =16

    5 2 5

    =326 2 6

    =64

    7 2 7

    =128

    8 2 8

    =256

    9 2 9

    =512

    10 2 10

    =1024

    每增加一个比特位,二进制代码数翻一番。

    如果知道需要多少个代码,那么怎样才能知道需要多少个比特位呢?换

    句话说,在上述表中,如何才能由代码数反推出比特位数呢?

    用到的方法叫作取以2为底的对数,对数运算是幂运算的逆运算。我们

    知道2的7次幂等于128,以2为底的128的对数就等于7。用数学记号来表

    示第一个句子为:

    2 7

    =128

    它与下述句子等价:

    log 2

    128=7

    因此,如果以2为底的128的对数等于7,以2为底的256的对数等于8,那

    么,以2为底的200的对数等于多少呢?大约是7.64,但实际上并不需要

    知道它。如果要表示200种不同的事物,我们共需要8个比特。

    比特通常无法从日常观察中找到,它深藏于电子设备中。我们看不到压

    缩磁盘(CD)、数字手表或计算机中编过码的比特,但有时候比特也可以

    清晰地看到。

    下面就是一个例子。如果你手头有一个使用35毫米胶片的相机,观察一

    下它的卷轴。这样拿住胶卷:胶卷上有像国际跳棋棋盘一样的银色和黑色方格,方格已用数字1~12

    标识。这叫作DX编码,这12个方格实际上是12个比特。一个银色的方

    格代表值为1的比特,一个黑色的方格代表值为0的比特。方格1和7通常

    是银色的(代表1)。

    这些比特是什么意思呢?你可能知道有些胶片对光的敏感程度要比其他

    胶片强,这种对光的敏感程度称作胶片速度。说对光非常敏感的胶片很

    快是因为这种胶片的曝光速度快。曝光速度是由ASA(American

    standards association,美国标准协会)来制定等级的,最常用的等级有

    100、200和400。ASA等级不只是以十进制数字的形式印在胶卷的外包

    装和暗盒上,而且还以比特的形式进行了编码。

    胶卷总共有24个ASA等级,它们是:

    25 32 40

    50 64 80

    100 125 160

    200 250 320

    400 500 640800 1000 1250

    1600 2000 2500

    3200 4000 5000

    为ASA等级编码需要多少个比特呢?答案是5个比特。我们知道,2 4

    =16,与24比太小了;2 5

    =32,又超过了所需的编码数。

    比特值与胶片速度的对应关系如下所示:多数现代的35毫米照相机胶片用的都是这些代码(除了那些要手工进行

    曝光的相机和具有内置式测光表但需要手工设置曝光速度的相机以

    外)。如果你看过照相机的内部放置胶卷的地方,你应该能够看到和胶

    片的金属方格(1~6号)相对应的6个金属可接触点。银色方格实际上

    是胶卷暗盒中的金属,是导体;油漆了的黑色方格,是绝缘体。

    照相机的电子线路中有一支流向方格1的电流,方格1通常是银色的。这

    支电流有可能流

    到方格2~6,这要依方格中是纯银还是涂了油漆而定。这样,如果照相

    机在接触点4和5检测到了电流而在接触点2、3和6没有检测到,胶片的

    速度就是400ASA。照相机可以据此调节曝光时间。

    廉价的照相机只要读方格2和方格3,并且假定胶片速度是50、100、200

    或400ASA四种可能速度之一。

    多数相机不读方格8~12。方格8、9、10用来对这卷胶卷进行编码;方

    格11和12指出曝光范围,依胶片用于黑白照片、彩色照片还是幻灯片而

    定。

    也许最常见的二进制数的表现形式是无处不在的UPC(universal product

    code,通用产品代码),即日常所购买的几乎所有商品包装上的条形

    码。条形码已经成为计算机在日常生活中应用的一种标志。

    尽管UPC常常使人多疑,但它确实是一个无辜的小东西,发明出来仅仅

    是为了实现零售业的结算和存货管理的自动化,且其应用是相当成功

    的。当它和一个设计精良的结算系统共同使用时,顾客可以拿到列出细

    目的售货凭条,这一点是传统现金出纳员所无法做到的。

    有趣的是,UPC也是二进制代码,尽管它初看起来并不像。将UPC解码

    并看看UPC码具体是怎样工作的是很有益的。

    通常情况下,UPC是30条不同宽度的垂直黑色条纹的集合,由不同宽度

    的间隙分割开,其下标有一些数字。例如,以下是Campbell公司10盎司

    的罐装鸡汁面包装上的UPC:可将条形码形象地看成是细条和黑条,窄间隙和宽间隙的排列形式,事

    实上,这是观察条形码的一种方式。黑色条有四种不同的宽度,较宽的

    条的宽度是最细条的宽度的两倍、三倍或者四倍。同样,各条之间的间

    隙中较宽的间隙是最窄间隙的两倍、三倍或者四倍。

    但是,看待UPC的另一种方式是将它看作是一系列的比特。记住,整个

    条形码与条形码扫描仪在结算台“看”到的并不完全一样。扫描仪不会识

    别条形码底部的数字,因为识别数字需要一种更复杂的技术—光学字符

    识别技术,又称作OCR(optical character recognition)。实际上,扫描

    仪只识别整个条形码的一条窄带,条形码做得很大是为了便于结算台的

    操作人员用扫描仪对准顾客选购的物品。扫描仪所看到的那一条窄带可

    以这样表示:

    它看上去是不是很像摩尔斯编码?

    当计算机自左向右进行扫描时,它给自己遇到的第一个条分配一个值为

    1的比特值,给与条相邻的间隙分配一个值为0的比特值。后续的间隙和

    条被当作一行中一系列比特中的1个、2个、3个还是4个比特读进计算机

    要依据条或间隙的宽度而定。扫描进来的条形码的比特形式很简单:

    因此,整个UPC只是简单的由95个比特构成的一串。本例中,这些比特

    可以像下面这样分组:起初的3个比特通常是101,这就是最左边的护线,它帮助计算机扫描仪

    定位。从护线中,扫描仪可以知道代表单个比特的条或间隙的宽度,否

    则,所有包装上的UPC印刷大小都是一样的。

    紧挨着最左边的护线是每组有7个比特位的六组比特串,每一组是数字0

    ~9的编码之一,我们在后面将证明这一点。接着的是5个比特的中间护

    线,此固定模式(总是01010)是一种内置式的检错码。如果扫描仪在

    应当找到中间护线的地方没有找到它,扫描仪就认为那不是UPC。中间

    护线是防止条形码被窜改或错印的方法之一。

    中间护线的后面仍是每组7个比特的6组比特串。最后是最右边的护线,也总是101。最后的最右护线使得UPC反向扫描(也就是自右向左扫

    描)同正向扫描一样成为可能,这一点我们将在后面解释。

    因而整个UPC对12个数字进行了编码。左边的UPC包含了6个数字的编

    码,每个数字占有7个比特位。你可以用下表进行解码:左边的编码

    0001101=0 0110001=5

    0011001=1 0101111=6

    0010011=2 0111011=7

    0111101=3 0110111=8

    0100011=4 0001011=9

    注意,每个7位代码都是以0开头,以1结尾的。如果扫描仪遇到了第一

    个比特位值为1或最后一个比特位值为0的情况,它就知道自己没有将

    UPC正确地读入或者是条形码被窜改了。另外我们还注意到每个代码都

    仅有两组连续的值为1的比特位,这就意味着每个数字对应着条形码中

    的两个竖条。

    上表中的每个代码中都包含有奇数个值为1的比特位,这也是用于检测

    差错和数据一致性的一种机制,称为奇偶校验。如果一组比特位中含有

    奇数个1,就称之为奇校验;如果含有偶数个1,就称之为偶校验。这样

    看来,所有这些代码都拥有奇校验。

    为了给UPS右边的7位一组的数字解码,可以采用下面的表格:

    右边的编码

    1110010=0 1001110=5

    1100110=1 1010000=6

    1101100=2 1000100=7

    1000010=3 1001000=8

    1011100=4 1110100=9

    这些代码都是前述代码的补码或补数:凡是1的地方都换成0,凡是0的

    地方都换成1。这些代码都是以1开始,以零结束,并且每组都有偶数个1,称之为偶校验。

    现在,可以对UCP进行解码了。借助前两个表格,Campbell公司10盎司

    的罐装鸡汁面的包装上用UPC编码的12个数字是:

    0 51000 01251 7

    这个结果是令人失望的,正如你所看到的那样,它们和印在UPC底部的

    数字完全相同(这样做是有意义的,因为由于某种原因,扫描仪可能无

    法识别条形码,收银员就可以手工将这些数字输进去。)我们还没有完

    成解码的全部任务,而且,我们也无法从中解码任何秘密信息。然而,关于UPC的解码工作已经没有了,那30个竖条已经变成了12个数字。

    第一个数字(在这里是0)被称为数字系统字符,0的意思是说这是一个

    规范的UPC编码。如果是具有不同重量的货物的UPC(像肉类或其他商

    品),这个数字是2;订单、票券的UPC编码的第一个数字通常是5。

    紧接着的5个数字是制造商代码。在上例中,51000是Campbell鸡汁面公

    司的代码。Campbell公司生产的所有产品都使用这个代码。再后面的5

    个数字(01251)是该公司的某种产品的编号,上例中是指 盎司的

    罐装鸡汁面。别的公司的鸡汁面可能有不同的编号,且01251在另外一

    个公司可能是指一种完全不同的产品。

    和通常的想法相反,UPC中没有包含该种产品的价格。产品的价格信息

    可以从商店中使用的与该扫描仪相联的计算机中检索互到。

    最后的数字(这里是7)称作模校验字符,这个字符可用来进行另外一

    种错误检验。为了解释校验字符是怎样工作的,将前11个数字(是0

    5100 001251)各用一个字母来代替:

    A BCDEF GHIJK

    然后,计算下式的值:

    3×(A+C+E+G+I+K)+(B+D+F+H+J)

    从紧挨它并大于等于它的一个10的整倍数中减去它,其结果称为模校验字符。在上例中,有:

    3×(0+1+0+0+2+1)+(5+0+0+1+5)=3×4+11=23

    紧挨23并大于等于23的一个10的整倍数是30,故:

    30-23=7

    这就是印在外包装上并以UPC形式编码的模校验字符,这是一种冗余措

    施。如果扫描仪计算出来的模校验结果和UPC中编码中的校验字不一

    致,计算机就不能将这个UPC作为一个有效值接收。

    正常情况下,表示从0~9的十进制数字只需4个比特就足够了。在UPC

    中,每个数字用了7个比特,这样总共有95个比特来表示11个有用的十

    进制数字。事实上,UPC中还包括空白位置(相当于9个0比特),位于

    左、右护线的两侧。因而,总共有113个比特用来编码11个十进制数,平均每个十进制数所用超过了10个比特位!

    正像我们所知道的那样,有部分冗余对于检错来讲是必要的。这种商品

    编码如果能够很容易地被顾客用粗头笔修改的话,这种代码措施也就难

    以发挥其作用了。

    UPC编码可以从两个方向读,这一点是非常有益的。如果扫描仪解码的

    第一个数字是偶校验(即:每7位编码中共有偶数个1),扫描仪就知道

    它正在从右向左进行解码。计算机系统用下表对右边的数字解码:

    逆向时右边数字的代码

    0100111=0 0111001=5

    0110011=1 0000101=6

    0011011=2 0010001=7

    0100001=3 0001001=8

    0011101=4 0010111=9

    下面是对左边数字的解码表:逆向时左边数字的代码

    1011000=0 1000110=5

    1001100=1 1111010=6

    1100100=2 1101110=7

    1011110=3 1110110=8

    1100010=4 1101000=9

    这些7位编码与扫描仪由左向右扫描时所读到的编码完全不同,但不会

    有模棱两可的现象。

    让我们再看看本书中提到的由点、划组成其间用空格分开的摩尔斯电

    码。摩尔斯电码看上去不像是由0和1组成的,但它确实是。

    下面回忆一下摩尔斯电码的编码规则:划的长度等于点长度的三倍;单

    个的点或划之间用长度与点的长度相等的空格分开;单词内的各个字母

    之间用长度等于划的长度的空格分隔;各单词之间由长度等于两倍的划

    长度的空格分开。

    为使分析更加简单,我们假设划的长度是点长度的两倍而不是3倍。也

    就是说,一个点是一个值为1的比特位,一个划是两个值为1的比特位,空格是值为0的比特位。

    下面是第2章的摩尔斯电码的基本表:下面是将它转化为比特形式的结果:

    注意,所有的编码都以1开头,以两个0结束。结尾处的两个零代表单词

    中各个字母之间的空格,单词之间的空格用另外的一对0来表示。因而,“Hi, there”的摩尔斯电码通常是这样的:

    但是,采用比特形式的摩尔斯电码看起来像UPC编码的横切面:

    用比特的形式表示布莱叶盲文比表示摩尔斯电码容易得多。布莱叶编码

    是6比特代码。布莱叶盲文中的每一个字母都是由6个点组成的,点可能

    是凸起的,或没有凸起(平滑)的。如在第3章中讲的那样,这些点通常用

    数字1~6编号:

    例如,单词“code”可以用布莱叶盲文这样表示:

    如果突起的点是1,平坦的点是0,则布莱叶盲文中的每一个符号都可以

    用6个比特的二进制代码表示。单词“code”中的四个布莱叶字母符号就

    可以简单地写成:

    100100101010100110100010

    最左边的一位对应编号为1的位置,最右边的一位对应编码为6的位置。正如前面所讲到的,比特可以代表单词、图片、声音、音乐、电影,也

    可以代表产品编码、胶片速度、电影的受欢迎程度、英军的入侵以及某

    人所挚爱的人的意愿。但是,最基本的一点是:比特是数字。当用比特

    表示信息时只要将可能情况的数目数清楚就可以了,这样就决定了需要

    多少个比特位,从而使得各种可能的情况都能分配到一个编号。

    比特在哲学和数学的奇怪混合物—逻辑—中发挥作用。逻辑最基本的目

    标是证明某个语句是否正确,正确与否也可以用1和0来表示。 第10章逻辑与开关

    真理是什么呢?亚里士多德认为逻辑与它有关。他的讲义合集《工具

    论》(Organon,可追溯到公元前4世纪)是最早的关于逻辑的详细著

    作。对于古希腊人而言,逻辑是追寻真理的过程中用于分析语言的一种

    手段,因此它被认为是一种哲学。亚里士多德的逻辑学的基础是三段

    论。最有名的三段论(它并非是在亚里士多德的著作中发现的)是:

    All men are mortal;

    Socrates is a man;

    Hence, Socrates is mortal.

    (所有的人都是要死的;

    苏格拉底是人;

    所以,苏格拉底是要死的。)

    在三段论中,两个前提被假设是正确的,并由此推出结论。

    苏格拉底之死这个例子看上去似乎太直白了,但还有许多其他不同的三

    段论。例如,考虑下面两个由19世纪数学家Charles Dodgson(也就是

    Lewis Carroll)提出的前提:

    All philosophers are logical;

    an illogical man is always obstinate.

    (所有的哲学家都是有逻辑头脑的;

    一个没有逻辑头脑的人总是顽固的。)

    它所能推出的结论一点儿也不明显。(事实上,结论是“一些顽固的人

    不是哲学家(Some dostinate persons are not philosophers)”)请注意结论中

    一个出乎意料且令人迷惑的词“一些(some)”。两千多年来,数学家们对亚里士多德的逻辑理论苦苦思索,试图用数学

    符号和操作符来表现它。19世纪以前,唯一能接近这个目标的人是莱布

    尼兹(1648—1716),他早年涉足逻辑学领域,后来转向其他学科(比

    如说,他几乎和牛顿同时独立地发明了微积分)。

    接下来有所突破的是乔治·布尔。

    乔治·布尔1815年生于英格兰,他周围的环境对他的成长很不利。他父

    亲是鞋匠,而母亲曾是女仆,英国森严的等级制度使布尔学不到什么有

    别于父辈的东西。但是,靠着他自身强烈的好奇心及父亲的帮助(其父

    对科学研究、数学和文学有浓厚的兴趣),年轻的乔治自学了上层阶级

    男孩才能学到的课程,包括拉丁文、希腊语及数学。由于他早年在数学

    方面发表的论文,1849年,布尔被任命为爱尔兰Cork市的皇后大学数学

    系的首席教授。

    19世纪中期的几位数学家在逻辑理论的数学定义上做了一些工作(最著

    名的是迪摩根),但只有布尔有真正概念上的突破。他最早的贡献是发

    表的一本很简短的书《The Mathematical Analysis of Logic, Being an

    Essay Towards a Calculus of Deductive Reasoning》(1847),接着又发表了

    一篇很长且充满抱负的文章:《An Investigation of the Laws of Thought

    on Which Are Founded the Mathematical Theories of Logic and

    Probabilities》(1854),简称为《The Laws of Thought》。1864年的一

    天,布尔在雨中赶去上课时不幸感染上了肺炎,不治身亡,享年49岁。

    我们可以从布尔在1854年所著书的题目中看出他富于野心的想法:由于

    充满理性的人脑用逻辑去思考,那么,如果能用数学来表征逻辑,我们

    也就可以用数学来描述大脑是如何工作的。当然,现在看来这种想法似

    乎十分幼稚。(但却超越了他所在的年代。)

    布尔发明了一种和传统代数看起来、用起来都十分相似的代数。在传统

    代数中,操作数(通常是字母)代表数字,而操作符(多是“+”或“×”)

    指明这些操作数如何结合到一起。一般我们可用传统代数解决类似下面

    的问题:如果安娜有3磅豆腐,贝蒂的豆腐是安娜的2倍,卡门的豆腐比

    贝蒂多5磅,迪尔德丽的豆腐是卡门的3倍。那么,迪尔德丽有多少豆腐

    呢?

    为了计算这个问题,我们首先把语句转化为算术式子,用四个字母代表

    每个人拥有豆腐的数量,即:A=3

    B=2×A

    C=B+5

    D=3×C

    可以通过代入把上述四个表达式合为一个式子,最后执行加法和乘法,即:

    D=3×C

    D=3×(B+5)

    D=3×((2×A)+5)

    D=3×((2×3)+5)

    D=33

    当做传统代数题时,要遵循一定的规则。这些规则可能已经和实践融为

    一体,以至于我们不再认为它们是规则,甚至忘记了它们的名字。但规

    则确实是任何形式的数学的基础。

    第一个规则是加法与乘法的交换律,即我们可以在操作符两边交换操作

    数的位置:

    A+B=B+A

    A×B=B×A

    相反,减法和除法是不满足交换律的。

    加法和乘法也满足结合律,即:

    A+(B+C)=(A+B)+C

    A×(B×C)=(A×B)×C最后,乘法对加法可以进行分配:

    A×(B+C)=(A×B)+(A×C)

    传统代数的另外一个特点是它总是处理数字,如豆腐的重量或鸭子的数

    量,火车行驶的

    距离或家庭成员的年龄。是布尔超凡的智慧使代数脱离了数字的概念而

    变得更加抽象。在布尔代数中(布尔的代数最终被这样命名)操作数不

    是指数字,而是指集(类)。一个类仅仅表示一组事物,也就是后来熟

    知的集合。

    让我们来讨论一下猫。猫或公或母,为方便起见,我们用字母M指代公

    猫的集合,用F指代母猫的集合。记住,这两个符号并不代表猫的数

    量,公猫或母猫的数量随着小猫仔的出生和老猫的不幸离去而变化,这

    两个字母代表的是猫的种类—具有某种特点的猫。因而我们不说公猫,而是用M来代表它们。

    我们也可以用其他字母代表猫的颜色。例如,用T代表黄褐色的猫,用

    B代表黑猫,用W代表白猫,而用O代表所有其他颜色的猫。

    最后(至少就这个例子而言),猫要么是阉过的要么是有生育能力的。

    我们用字母N代表阉过的猫,而用U代表有生育能力的猫。

    在传统代数中,操作符+和×被用于表示加法和乘法。在布尔代数中,同

    样用到了+和×。这似乎会引起混淆。人人都知道在传统代数中如何对数

    字进行加和乘,但是我们如何对“类”进行加和乘呢?

    事实上,在布尔代数中我们并不真正地做加或乘,相反,这两个符号有

    着完全不同的意思。

    在布尔代数中,符号+意味着两个集合合并,两个集合的合并就是包含

    第一个集合的所有成员及第二个集合的所有成员。例如,B+W表示黑猫

    和白猫的集合。

    布尔代数中的符号×意味着取两个集合的交集,两个集合的交集包含的

    元素既在第一个集合中,也在第二个集合中。例如,F×T代表了一种猫

    的集合,这个集合中的猫既是母猫又是黄褐色的。与传统代数一样,我们可以把F×T写成F·T或简写为FT(这正是布尔代数所期望的)。你可

    以把这两个字母看成是连在一起的两个形容词:黄褐色的母猫。

    为避免传统代数和布尔代数之间的混淆,有时候用符号∪和∩而不用

    +和×来表示并运算和交运算。但布尔对数学的解放性的部分影响是使熟

    悉的操作符更加抽象,所以,我们决定坚持他的决定,而不为他的代数

    引入新的符号。

    交换律、结合律和分配律在布尔代数中均适用。而且,在布尔代数中,操作符+可以对×进行分配,这在传统代数中是不成立的,即:

    W+(B×F)=(W+B)×(W+F)

    这个式子表示白猫(W)和黑色母猫(B×F)的并集和等式右边两个集

    合的交集是一样的,这两个集合是白猫和黑猫的并集(W+B)及白猫和

    母猫的并集(W+F)。要掌握这个规则有些困难,但它的确有用。

    为了使布尔代数更加完整,我们还需要两个符号。这两个符号看上去像

    数字,但它们并不真的是数字,因为有时候它们和数字有些不同。符

    号“1”在布尔代数中表示“整个宇宙(全集)”,也就是我们所谈论的每件事

    物。本例中,符号“1”表示“所有的猫”。这样:

    M+F=1

    即母猫和公猫的并集是所有的猫。同样,黄褐色猫、黑猫、白猫及其他

    颜色的猫的并集也是所有的猫,即:

    T+B+W+O=1

    你也可以这样表示所有的猫:

    N+U=1

    符号1可以用一个减号-来排除一些事物。例如:

    1-M

    表示除了公猫以外的所有猫。排除公猫以后的全集就是母猫的集合:1-M=F

    我们所需要的另外一个符号是“0”。在布尔代数中,“0”表示空集,即不

    含任何事物的集合。当求取两个完全相互排斥的集合的交集时,空集就

    产生了。例如,既是母的又是公的猫的集合可以表示为:

    F×M=0

    注意,符号1和0有时的用法与传统代数相同。例如,所有的猫和母猫求

    交集即是母猫这个集合:

    1×F=F

    空集和母猫求交集还是空集:

    0×F=0

    空集和母猫的并是母猫这个集合:

    0+F=F

    但有时与传统代数中得到的结果就不太一样了。例如,所有的猫和母猫

    的并集是所有的猫:

    1+F=1

    这个表达式在传统代数中是没有意义的。

    由于F代表母猫的集合,1-F代表所有其他猫的集合,则这两个集合的

    并集是1:

    F+(1-F)=1

    并且它们的交集是0:

    F×(1-F)=0

    历史上,这个公式代表了逻辑中一个十分重要的概念,即矛盾律。它表

    明一个事物不能同时是它自己和它自己的反面。使布尔代数和传统代数看起来完全不同的是下面这个表达式:

    F×F=F

    这个式子在布尔代数中有着完美的意义:母猫的集合和母猫的集合的交

    集仍旧是母猫的

    集合。但若F代表一个数字的话,这个公式显然就不对了。布尔认为:

    X2=X

    是使他的代数与传统代数区分开来的唯一表达式。另一个按照传统代数

    看起来很有趣的

    布尔表达式是:

    F+F=F

    母猫和母猫的并集仍是母猫这个集合。

    布尔代数为解决亚里士多德的三段论提供了一个数学方法。再看看这个

    著名三段论的两个前提:

    所有的人都是要死的;

    苏格拉底是人。

    我们用字母P代表所有人的集合,M代表要死的东西的集合,S代表苏格

    拉底。那么,所谓“所有的人都是要死的”意味着什么呢?它其实表示了

    所有人的集合和所有要死的东西的集合的交集是所有的人这个集合,即:

    P×M=P

    而P×M=M这个式子是错误的,因为要死的东西还包括猫、狗、榆树等

    等。

    而“苏格拉底是人”意味着苏格拉底这个集合(非常小)和所有人的集合

    (很大)的交集是苏格拉底这个集合:S×P=S

    由于从第一个式子中知道P=P×M,所以可以把它代入第二个式子,即:

    S×(P×M)=S

    根据结合律,上式等同于:

    (S×P)×M=S

    但我们已经知道S×P等于S,所以上式可简化为:

    S×M=S

    现在计算完毕。这个表达式告诉我们,苏格拉底和所有要死东西的集合

    的交集是苏格拉底,也就是说苏格拉底是要死的。相反,如果认为S×M

    等于0,那么结论就是苏格拉底不会死。再如果,若S×M等于M,则能

    推出的结论就是苏格拉底是唯一会死去的东西,而其他任何东西都是不

    朽的!

    用布尔代数来证明显而易见的事实似乎有些小题大做(尤其当考虑到苏

    格拉底早已在2400年以前就去世了时),不过,布尔代数还可以用来判

    断一些事物是否满足一定的标准。也许有一天,你走进宠物店对店员

    说:“我想要一只阉过的公猫,白的或黄褐色的均可;或者要一只没有

    生殖能力的母猫,除了白色,其他任何颜色均可;或者只要是只黑猫,我也要。”店员对你说:“看来您想要的猫是下面的式子表示的集合中的

    一只:

    (M×N×(W+T))+(F×N×(1-W))+B

    对吗?”你回答道:“是的,完全正确!”

    为了证明店员是正确的,你可能想放弃并和交的概念而转向“OR(或者

    或)”和“AND(并且与)”。大写这两个词是因为虽然在通常情况下它

    们代表语言中的概念,但它们也代表了布尔代数中的操作。当求两个集

    合的并集时,你实际上是从第一个集合“或”从第二个集合中取得事物放

    入结果集合里。当求两个集合的交集时,满足条件的事物必定在第一个

    集合中“并且”也在第二个集合中。此外,每当你看见后跟减号的1,你

    可以使用单词“NOT(非)”来表示。小结如下:?+(以前表示求并集)现在表示OR。

    ·×(以前表示求交集)现在表示AND。

    ·1-(以前表示从全集中排除一些事物)现在表示NOT。

    这样,刚才的表达式可以写成下面的形式:

    (MANDNAND(WORT))OR(FANDNAND(NOTW))ORB

    这与你的口头描述已经十分接近了。注意圆括号是如何清楚地表达出你

    的意图的。你想要的猫来自下面三个集合之一:

    (MANDNAND(WORT))

    或

    (FANDNAND(NOTW))

    或

    B

    写下这个公式后,店员就可以进行布尔测试的工作了。别这么大惊小怪

    的,这里已经悄悄转移到另一种不同形式的布尔代数中去了。在这种形

    式的布尔代数中,字母不再只表示集合,字母还可以被赋予数字,但需

    要注意的是它们只能被赋予0或者1。数字1表示“是的”、“正确”,本例

    中的意思是“这只猫符合我的要求”;数字0表示“否定”、“错误”、本例中

    即“这只猫不符合我的要求”。

    首先,店员拿出一只未阉过的黄褐色的公猫。下面是满足条件的猫的集

    合:

    (M×N×(W+T))+(F×N×(1-W))+B

    当用0和1代替字母后就变成了下面的样子:

    (1×0×(0+1))+(0×0×(1-0))+0注意被赋予了1的字母只有M和T,因为拿来的这只猫是公的,黄褐色

    的。

    现在必须要做的是简化这个表达式。如果简化后表达式的结果是1,这

    只猫就满足了你的要求,否则就不是你想要的猫。当简化表达式时,千

    万记住我们并不是在真正地做加法和乘法。当+表示OR,×表示AND

    时,大部分规则是相同的。(现代课本中有时用∧和∨分别表示AND和

    OR,而不用×和+;但这里用+和×这两个符号却是恰到好处的。)

    当用×表示AND时,可能的结果是:

    0×0=0

    0×1=0

    1×0=0

    1×1=1

    换句话说,只有当×的左、右两个操作数均为1时,结果才为1。这个过

    程和普通乘法一模一样。若用一张小表总结一下,你会发现它们和第8

    章的加法表和乘法表的形式相似:

    AND 0 1

    0 0 0

    1 0 1

    当用+表示OR时,可能的结果是:

    0+0=0

    0+1=1

    1+0=1

    1+1=1当+的左、右操作数中有一个为1时,结果就是1。除了1+1=1这种情况,这种计算和普通加法产生的结果是一致的。可用另一张小表来总结:

    OR 0 1

    0 0 1

    1 1 1

    现在可以用这些表来计算前面那个表达式的结果了:

    (1×0×1)+(0×0×1)+0=0+0+0=0

    结果是0,表示“否定”、“错误”,即这只小猫不满足客户需求。

    接下来,店员拿来一只无生育能力的白色的小母猫。原始表达式是:

    (M×N×(W+T))+(F×N×(1-W))+B

    把0和1代入上式:

    (0×1×(1+0))+(1×1×(1-1))+0

    并且把它简化一下:

    (0×1×1)+(1×1×0)+0=0+0+0=0

    看来,这只可怜的小猫还是不符合要求。

    然后,店员又拿来一只无生育能力的灰色的小母猫。(灰色是非白色、黑色或黄褐色的一种其他颜色。)下面是表达式:

    (0×1×(0+0))+(1×1×(1-0))+0

    现在把它简化为:

    (0×1×0)+(1×1×1)+0=0+1+0=1

    最后的结果1表示“是的”、“正确”,这只小猫总算找到新家了!在你买到小猫的那天晚上,当小猫蜷身睡在你的腿上时,你开始考虑是

    否能够通过电线连接一些开关和灯泡来决定哪些小猫满足你的要求。

    (你真是一个奇怪的家伙。)你丝毫没有意识到你将要实现一个关键概

    念上的突破。你要做的是一些试验,这些试验把布尔代数和电路结合在

    一起,从而使使用二进制数字工作的计算机的设计和制造成为可能。

    (可别让这些话吓着你。)

    下面就开始了。你像往常一样把灯泡和电池连接在一起,这一回你用了

    两个开关:

    开关这种方式的连接—一个在另一个的右边—称为串联的。如果你闭合

    了左边的开关,什么也不会发生:同样,如果你让左边的开关断开而闭合右边的开关,结果还是一样。只

    有当左右两个开关都闭合时,灯泡才会发光,如下所示:

    这里的关键是“都”。只有左边和右边的开关都闭合时,电流才能流过回

    路。

    这个电路执行了一个逻辑运算。事实上,灯泡回答了这个问题:“两个

    开关都处于闭合状态吗?”可以把电路的工作总结为下面这张表:

    左开关状态 右开关状态 灯泡状态

    断开 断开 不亮

    断开 闭合 不亮

    闭合 断开 不亮

    闭合 闭合 亮

    在前一章中,我们已知道二进制数字(或“位”)是如何表示信息的:它

    可以表示从最普通的数字到Roger Ebert的拇指方向等的一切事情。可以

    说“0”代表“Ebert拇指向下的方向”,而“1”表示“Ebert拇指向上的方向”。

    一个开关有两个位置,所以它可以代表一个位。“0”表示“开关是断开

    的”,而“1”表示“开关是闭合的”。一个灯泡有两种状态,所以它也可以

    表示一个二进制位。“0”表示“灯泡不亮”而“1”表示“灯泡亮”。现在可以

    把上面的表简化一下:左开关状态 右开关状态 灯泡状态

    0 0 0

    0 1 0

    1 0 0

    1 1 1

    注意,如果交换左、右开关,结果是一样的,所以没必要指明哪个开关

    是左开关或右开关。因此这张表可以重画成类似于前面“AND”表

    和“OR”表的样子:

    开关串联 0 1

    0 0 0

    1 0 1

    事实上,这和“AND”表是一样的。让我们检查一下:

    AND 0 1

    0 0 0

    1 0 1

    这个简单的电路实际上执行了布尔代数的“AND”操作。

    现在试着用另一种方式连接电路:这些开关称为并行连接。它和前一种连接方式的区别是,如果闭合了上

    面的开关,灯泡会亮:

    如果闭合了下面的开关,灯泡会亮:如果同时闭合上、下两个开关,灯泡还是会亮:

    可见,当上面或下面的开关有一个闭合时,灯泡就会亮。这里的关键字

    是“或”。这个电路也执行了一个逻辑运算,灯泡回答了这样一个问题:“是否有

    开关闭合?”下面的表总结了这个电路是如何工作的:

    上开关状态 下开关状态 灯泡状态

    打开 打开 不亮

    打开 闭合 亮

    闭合 打开 亮

    闭合 闭合 亮

    仍然用“0”表示开关断开或灯泡不亮,用“1”表示开关闭合或灯泡亮。这

    张表可以这样:

    上开关状态 下开关状态 灯泡状态

    0 0 0

    0 1 1

    1 0 1

    1 1 1

    同样,这两个开关交换位置也没关系,所以这张表可以重写成如下的样

    子:

    开关并联 0 1

    0 0 1

    1 1 1

    你可能已经猜到了这和布尔代数中的“OR”表是一样的:

    OR 0 10 0 1

    1 1 1

    这意味着两个并联的开关执行的是和布尔一样的操作。

    当你再进入宠物店时,你告诉店员:“我想要一只阉过的公猫,白的或

    黄褐色的均可;或者要一只没生育能力的母猫,除了白色,其他任何颜

    色均可;或者只要是只黑猫,我也要。”店员便得到了如下的表达式:

    (M×N×(W+T))+(F×N×(1-W))+B

    现在你知道两个串联开关执行的是逻辑与(AND,由符号×来表示),两个并联开关执行的是逻辑或(OR,由符号+来表示),你可以按如下

    方法连接8个开关:

    这个电路中的每一个开关都被标上了一个字母(与布尔表达式中所用字

    母相同)。 表示非W,是1-W的另一种写法。事实上,如果按从左至

    右,从上至下的顺序来阅读这个电路图,你遇到的字母的顺序和它们在

    布尔表达式中出现的次序是一样的。表达式中的乘号(×)都对应角是电

    路图中串联的两个或两组开关的位置;表达式中的加号(+)号对应的是

    电路图中并联的两个或两组开关的位置。你应该记得,店员最先挑出的是只未阉过的褐色的公猫。闭合相应的开

    关:

    尽管M、T和非W这三个开关都闭合了,但没有构造出一个完整的电路

    来点亮灯泡。接着,店员拿出一只无生育能力的白色的母猫:

    这次,由于右边开关未闭合也无法构成一个完整的电路。但最后,店员

    拿出一只无生育能力的灰色的母猫:这样就可以构出一个完整的电路,灯泡被点亮并表示小猫符合你的要

    求。

    乔治·布尔从来没有连接过这样一个电路,他也没能看到用开关、电线

    和灯泡来实现一个布尔表达式。当然,其中的一个原因是直到布尔死后

    15年,白炽灯泡才被发明。但摩尔斯在1844年展示了他的电报机,比布

    尔的《The Laws of Thought》的发表早10年,而用一个电报发声器来代

    替所示电路中的灯泡是十分简单的。

    可惜19世纪没有人把布尔代数中的与、或和串联、并联一些简单的开关

    联系起来。数学家没有、电工没有、电报操作员也没有,没有人想到过

    这种联系,甚至连计算机革命的创始人查尔斯·巴贝奇(1792—1871)

    也没有。他曾和布尔联系过,并了解过他的工作,他一生中大部分时间

    致力于设计第一台差分机及接下来的解析机。一个世纪之后,这些机器

    被认为是现代计算机的雏型。我们现在知道,帮助巴贝奇的是他认识到

    计算机应产生于电报继电器中,而非那些齿轮和控制杆。

    是的,问题的答案正是电报继电器。 第11章逻辑门电路

    在遥远的将来,当人们回顾20世纪的计算机发展史时,有人可能会以为

    一种称为“logic gates(逻辑门)”的设备是以著名的微软公司创始人的名

    字命名的(BillGates中的Gates在英语中有“门”的意思),其实并非如

    此。我们很快就会明白,逻辑门和通常让水和人通过的门十分相似。逻

    辑门通过阻挡或允许电流通过在逻辑中执行简单的任务。

    回忆一下在上一章中你走进一个宠物店所要的那只猫,这可以由下面的

    布尔表达式说明:

    (M×N×(W+T))+(F×N×(1-W))+B

    同时,也可以用下面的电路来选择符合条件的小猫:

    这样一个电路有时被称为网络。但在今天,网络这个词更多地被用来指

    连接起来的计算机,而不仅仅只是开关的集合。

    尽管这个电路包含的全是19世纪发明的东西,但那时却没有人意识到布

    尔代数可以直接由电路实现。这种等同性直到20世纪30年代才被发现,主要贡献人是克劳德·香农(生于1916年)。香农在他著名的、于1938年在

    麻省理工学院所写的硕士论文《A Symbolic Analysis of Relay andSwitching Circuits》中阐述了这个问题。(10年之后,香农的文章

    TheMathematical Theory of Communication》是使用“位(bit)”这个字来表

    示二进制数字的第1篇出版物。)

    1938年以前,人们已经知道当把两个开关串联起来时,只有两个开关都

    闭合电流才能流通;而当把两个开关并联起来时,只需闭合其中的一个

    即可构成回路。但没有人能像香农那样清晰地阐述电子工程师可以使用

    布尔代数的所有工具来设计带开关的电路。此外,如果你简化了描述网

    络的布尔表达式,你也可以相应地简化网络。

    例如,描述你想要的小猫的表达式是:

    (M×N×(W+T))+(F×N×(1-W))+B

    用结合律把用×结合的变量重新排序并按下面的方式重写表达式:

    (N×M×(W+T))+(N×F×(1-W))+B

    为更清楚地表达意图,可以定义名为X和Y的两个新变量:

    X=M×(W+T)

    Y=F×(1-W)

    现在,描述你想要的小猫的表达式可以写成下面的样子:

    (N×X)+(N×Y)+B

    完成简化后,我们再把X、Y代回原来的式子。

    注意,变量N在表达式中出现了两次。使用分配律,表达式可以按如下

    方式重写,并只使用一个N:

    (N×(X+Y))+B

    现在把X、Y表达式代入:

    (N×((M×(W+T))+(F×(1-W))))+B由于有很多圆括号,该表达式看上去似乎仍很复杂。但表达式中少了一

    个变量项(减少了一次×运算),也就意味着网络中少了一个开关。这

    是修改后的电路图:

    确实,证明修改前后的两个电路图功能是一样的比去证明两个表达式功

    能是相同的要简单。

    可是,网络中仍然多余了三个开关。理论上讲,你只需要四个开关来定

    义你心目中的猫咪。为什么是四个呢?因为每个开关都是一个“位”。你

    需要一个开关来定义性别(断开表示公的,而闭合表示母的);一个开

    关来定义是否有生育能力(闭合表示阄过的,断开表示未阄过的)还需要

    两个开关表示颜色。因为只有四种可能的颜色(白、黑、褐和其他所有

    颜色),而我们知道四种选择可以用两个二进制位来定义,所以只需要

    两个开关来表示颜色。例如,两个开关都断开表示白色,一个闭合表示

    黑色,另一个闭合表示褐色,两个开关都闭合就表示其他所有颜色。

    现在,让我们做一个控制面板来选择一只猫。控制面板上有四个开关

    (正如你家里的电灯开关)和一个灯泡:开关打到上面是指开关闭合,反之是指开关断开。也许表示猫的颜色的

    两个开关标识得不是很清楚,这是为了把控制面板做得更简练不得已而

    造成的。在表示颜色的一对开关中,左边的开关标着B,如果只有它往

    上就表示黑色;右边的开关标着T,如果只有它往上就表示黄褐色;

    B、T两个开关均往上则表示其他颜色,由O标识;B、T两个开关均往

    下则表示白色,由W标识。

    在计算机专业术语中,开关是一种输入设备,输入是控制电路如何工作

    的信息。本例中输入开关对应于描述一只猫咪的4位信息,输出设备是

    灯泡。如果开关描述了一只符合条件的猫,灯泡就会亮。上面介绍的控

    制面板上的开关被设置成表示一只无生育能力的黑母猫,这是符合你的

    要求的,所以灯泡亮了。

    现在所要做的是设计一个使控制面板工作的电路。

    前面提到过香农的论文题目是《A Symbolic Analysis of Relay and

    Switching Circuits》,他所指的relay和第6章中所讲的电报系统的继电器

    很类似。在香农的论文发表时,继电器已被用作其他目的,尤其是用于

    电话系统的大型网络。

    像开关一样,继电器也可以串联或并联以执行逻辑中的简单任务。继电

    器的组合称为逻辑门。这里所说的“逻辑门执行简单逻辑任务”是指逻辑

    门只完成最基本的功能。继电器比开关好是因为继电器可以被其他继电

    器控制而不必用手指控制,这意味着逻辑门可以被组合起来以执行更复

    杂的任务,比如一些简单的算术操作。事实上,下一章就要展示如何用

    电线连接开关、灯泡、电池和继电器来构造一个加法机(尽管它只能工

    作于二进制数字状态)。继电器对电报系统的工作十分重要。连接电报站的电线长距离时电阻很

    大,需要一种方法来接收微弱的信号并把它增强后发送出去。继电器通

    过使用电磁铁控制开关可做到这一点。事实上,继电器放大了一个很弱

    的信号使其成为一个强信号。

    就我们的目的而言,我们并不对它的信号放大能力感兴趣,真正使我们

    着迷的是继电器作为开关可用电来控制而不用手指。可以用电线把继电

    器、开关、灯泡和一对电池做如下连接:

    注意左边的开关是断开的,灯泡不亮。当闭合开关时,电流流过围绕在

    铁棒上的线圈,于是铁棒具有了磁性,并把上面有弹性的金属簧片拉下

    来,从而连通了电路,使灯泡 ......

您现在查看是摘要介绍页, 详见PDF附件(10323KB,488页)