编码 : 隐匿在计算机软硬件背后的语言.pdf
http://www.100md.com
2020年1月20日
![]() |
| 第1页 |
![]() |
| 第6页 |
![]() |
| 第19页 |
![]() |
| 第26页 |
![]() |
| 第34页 |
![]() |
| 第1161页 |
参见附件(16591KB,1212页)。
编码 : 隐匿在计算机软硬件背后的语言,这本书详细的介绍了关于计算机的原理介绍,全书一共分为25个章节,阅读完此书你会有许多的收获!

介绍
这是一本讲述计算机工作原理的书。不过,你千万不要因为“工作原理”之类的字眼就武断地认为,它是晦涩而难懂的。作者用丰富的想象和清晰的笔墨将看似繁杂的理论阐述得通俗易懂,你丝毫不会感到枯燥和生硬。更重要的是,你会因此而获得对计算机工作原理较深刻的理解。这种理解不是抽象层面上的,而是具有一定深度的,这种深度甚至不逊于“电气工程师”和“程序员”的理解。
作者
Charles Petzold是Windows编程界的一位大师,当今世界项级技术作家。1994年5月,Petzold作为仅有的七个人之一(并且是的作家)被《视窗杂志》和Microsoft公司联合授予Windows Pioneer奖,以表彰他对Microsoft Windows所做出的贡献。
左飞,技术作家、译者,除本书外他还翻译了《代码阅读》和《代码质量》两部计算机领域的经典著作(两书分别荣获第14届和第17届美国Jolt图书震撼大奖),其所著的《代码揭秘》一书繁体版在中国台湾地区出版发行。2011年,在国家示范软件学院成立10周年庆祝大会上,他被国家示范软件学院院长联席会和大会组委会共同授予“国家示范软件学院成立10周年全国十佳出色毕业生”称号,以表彰他在专业领域中所做出的突出成绩。
薛佟佟,在南京航空航天大学取得工学硕士学位后加入中国移动通信集团,长期专注于云计算及分布式存储技术的研究与应用。他是中国移动公众服务云与一级私有云的核心推动者,同时是《提高C++性能的编程技术》(收录于电子工业出版社“传世经典书丛”)一书的译者。
主目录
第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章 电 筒 密 谈
假若你才 10岁,你的好朋友与你临街而住,而且你们卧室的窗
户面对着面 。每天晚上, 当父母像平常一样很早催你上床睡觉
时,你可能还想与好朋友交流思想、发现、小秘密、传 闻、笑话
和梦想,没有人可以责备你,毕竟 ,渴望交流是大多数人的天性。
当你们卧室还亮着灯时,你和你的好朋友可以临窗舞动手臂、打
手势或以身体语言来交 流思想,但复杂一些的交流就有些困难
了。而且一旦父母宣布“熄灯”,交流也就无法继续进 行了。
如何联系呢?用电话吗? 10岁的小孩子屋里有电话吗?即使
有,你们的谈话可能被偷听。 如果家里的电脑通过电话线联了
网,它可能会提供无声的帮助,不过很不幸,它也不会在你 的房
间里。
你和朋友采用的方法是用手电筒。所有的人都知道手电筒是为孩
子们藏在被窝里看书而 发明的,它也适合在黑暗中用来交流。它
无声无息,且光的方向性很好,不会从卧室的门缝 中泄露而使家
人起疑。
用手电筒的光可以交谈吗?这值得一试。一年级你就学过在纸
上写字母和单词,把这种 方法运用到手电筒上看起来也合情合
理。你所需做的就是临窗而站,用光画出字母。画字母 ‘O’,就打
开电筒,在空中画个圈,然后关上开关;字母‘ I’则是画竖直的一
笔。但是你很 快发现这种方法行不通,当你注视来去飞舞的光柱
时,会发现在脑海中将它们组合起来不是 件容易的事,这些光划
成的圈圈杠杠太不准确了。
也许你曾经看过一部电影,影片中两个水手隔海用闪烁的光传递
消息。在另一部电影中, 一个间谍用镜子反射阳光向一间屋子中
被俘获的同伙发送讯息。这就给了你启发,你起先设 计一种简单
的交流方法,使字母表中的每个字母与一定数目的闪烁相对应。 A
闪一下, B闪两 下,C闪三下,如此递推, Z就闪烁 26下。BAD这
个词由字母间有间隔的两闪、一闪、四闪组 成,这样你不会误以
为它是闪七下的字母 G了。词间的停顿则比字母间的停顿时间稍长一些。
这看起来很有希望,采用这种方法的优点是你不需要在空中挥舞
手电简,只需对准方向 按开关就行了;缺点是你试图发送的第一
个消息(“How are you?” )就需要 131次闪烁,更 糟的是,你忘了
定义标点符号,所以无法表示句尾的问号了。
这离问题的解决已经很近了,你想别人以前肯定也遇到过类似的
问题,你解决它的思想 一定是正确的。为了解决问题,白天的图
书馆之行使你发现了神奇的摩尔斯电码(morse code), 这正是你
想要的,即使你不得不重新学习如何“写”字母表中的字母。
以下就是区别:在你发明的体系中,每个字母是一定数目的闪
烁,从闪烁一下的 A到闪烁 26的Z;而在摩尔斯电码中,有长短两
种闪烁,当然,这会使摩尔斯电码更为复杂,但它在实 际应用中
却被证实是更有效的。那句“ How are you?”现在仅需 32次而不是
131次闪烁,而 且这还包含了问号。
在讨论摩尔斯电码的工作原理时,人们并不说“长闪烁”、“短闪
烁”,他们使用“点
(dot)”和“划( dash)”,因为这样易于在印刷品上表示。在摩尔斯电
码中,字母表中的每一个字母与一个点划序列相对应,正如在下表中你所看到的:
尽管摩尔斯电码与计算机毫不相关,但熟悉它的本质却对深入了
解计算机内部语言和软 硬件的内部结构有很大的帮助。
在本书中,编码或代码( code)通常指一种在人和机器之间进行
信息转换的系统(体系)。 换句话说,编码便是交流。有时我们
将编码看成是密码 (机密),其实大多数编码并不是的。大 多数的编
码都需要被很好地理解,因为它们是人类交流的基础。
在《百年孤独》的一书的开篇,马尔克斯回忆了一个时代,那
时“世界一片混沌,许多 事物没有名字。为了加以区别才给事物各
个命名。”这些名字都是随意的,没有什么原因说明 为什么不把猫
称为狗或不把狗称为猫。可以说英语词汇就是一种编码。
我们用嘴发出声音组成单词,这些词可以为那些听得到我们声音,理解我们所用语言的 人所听懂,我们称这种编码为“口头语
言”或“语音”。对写在纸上(或凿在石头上、刻在木 头上或通过比
划写在空气中)的词,还有一种编码方式,那就是我们在印刷的报
刊,杂志和 书籍上看到的字符,称之为“书面语言”或“文本”。在许
多语言中,语音和文本间有很强的 联系。例如在英语中,字母或
一组字母与一定的读音相对应。
手势语言的发明帮助了聋哑人进行面对面的交流。这是一种用手
和胳膊的动作组合来表 达词语中的单个字母、整个词及其基本概
念的语言。对盲人来说,他们可以使用布莱叶盲文
(Braille)。这种文字使用凸起的点代表字母,字母串和单词。当
谈话内容要被迅速地记录下 来时,缩写和速记是很有用的。
人们在相互沟通时使用了各种不同的编码,因为在不同的应用场
合,其中的一些较其他 的更为简便。例如,语言不能在纸上存
储,所以使用了文字;语言、文字不适合用来在黑夜 中安静地传
递消息,故摩尔斯电码是一个方便的替代品。只要一种编码可以适
用于其他编码 所不能适用的场合,它就是一种有用的编码。
以后将看到,计算机中使用了不同的编码来传递和存储数字、声
音、音乐、图像和视频
(电影)。计算机不能直接处理人类世界的编码,因为它不能模拟
人类的眼睛、鼻子、嘴和手 指来接收信息。尽管这些年来计算机
的发展趋势使我们的桌上电脑具有捕获、存储、处理和 提供人类
交流中所使用的各种信息的能,而且不论这些信息是视觉的(文字
和图片)、听觉的
(语言、声音及音乐)还是两者的混合(动画和电影)。所有这些
信息都要求使用它们自己的 编码方式,正如交谈需要使用人的某
些器官(嘴和耳朵),而书写和阅读则需要使用另外一些第1章 电 筒 密 谈 3
器官(手和眼睛)一样。 用手电筒发送摩尔斯电码时,电筒的开
关快速地合开代表一个点,让电筒照亮稍长的时
间则代表一个划。举例来说,发送字母 A,要先快速地合开开关,然后再稍慢些合开。在发送 下一个字母前要有短暂的停顿。约定
划的时间大约是点的 3倍。例如,如果点的照亮时间为 1 秒,那么
划就是 3秒。(实际上,摩尔斯电码的传递速度要快得多。)接收
者看到了短闪和长闪 就知道是 A。
摩尔斯电码中点划之间的间隔是极为关键的。例如,发送字母 A
时,点划之间的间隔应与 一个点的时间大致相同(如果点的时间
是 1秒,那么间隔的时间也是 1秒)。同一个词中字母间 间隔稍
长,约为划的持续时间(或者 3秒,如果那是划的持续时间的
话)。下面是单词“ hello” 对应的摩尔斯电码,图中示意了字母间
的间隔(隙):
单词之间相隔大约 2倍于划的时间(如果划是 3秒,那么间隔即
为 6秒)。下面是“ hi there” 对应的编码(码字):
手电筒开和关的时间长度并没有限定,这取决于点的时间长度,点长又由手电筒开关触 发的速度和摩尔斯电码发送者记忆电码的
熟练程度来决定,熟练发送者的划也许与生手的点 等长。这个小
问题会使接收电码有些困难,但在一两个字母之后,接收者通常就
可以辨认出 哪个是点,哪个是划了。
粗看起来,摩尔斯电码的定义 — 这里所谓的定义是指与字母表
中的字母相对应的各种 点划序列 — 与打字机字母的排列一样是随
意的。但仔细观察后你会发现不完全如此,简短 的码字分配给了
使用频率较高的字母,例如 E和T,爱赌博的人和“财富之轮”爱好
者可能一 下就注意到了这个问题;不常用的字母如 Q和Z(它们在
赌局中是 10点)则分配以较长的码 字。
几乎所有人都知道一点儿摩尔斯电码,国际遇险信号 SOS的摩尔
斯电码为“三点三划三 点”。SOS并非缩写,选择它仅仅因为它有一
个易记的摩尔斯电码序列。第二次世界大战中, 英国广播公司选用贝多芬第五交响曲中的片段作为节目前奏 — B A H 、 B A H 、B A H 、 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张表大小的规律了吗?每张表都恰好是其前一张表的
两倍大小。这其中包含的 意义是:前一张表的码字后加一个“滴”或
加一个“嗒“,即构成了后一张表。
可以按下面的方式总结这个有趣的规律:
点划数 码字数
1 2
2 4
3. 8
4 16
四张表中每张码字数都是前一张的两倍,那么如果第一张表含 2个
码字,第二张表则含2×2
个码字,第三张表 2×2×2个码字。以下是另一种表达方式: 点划数 码字数
1 2
2 2×2
3 2×2×2
4 2×2×2×2
当然,如果遇到数的自乘,可以用幂表示,例如 2×2×2×2可以写
成 24。数字 2、4、8、 16分别是 2的1、2、3、4次幂,因为可以用
依次乘 2的方法将它们计算出来。由此我们的总结 还可以写成下面
的方式: 点划数 码字数
1 212 22
3 23
4 24第 2章 编码与组合 7
这张表简单明了,码字数是 2的次方,次方数目与码字中含有
的“滴”“嗒”数目相同。 我们可以把表总结为一个简单的公式:
码字数 = 2“滴”与“嗒”的数目 很多编码中都用到 2的幂,在下一章中我们会看到另一个例子。 为了使译码的过程更为简
便,可以画出如下一张树形图:
这张表表示出了由“滴”与“嗒”的连续序列得出的字母。译码时,按箭头所指从左到 右进行。例如,你想知道电码“滴-嗒-滴”代表的
字母,那么从最左边开始选择点,沿箭头 向右选择划,接着又是
点,得出对应的字母是 R,它写在最后一个点的旁边。
如果认真考虑,会发现事先建立这样一张表是定义摩尔斯电码所
必需的。首先,它保证 了你不会犯给不同的字母相同码字的错
误!其次,它保证你使用了全部的可用码字,而没有
使“滴”与“嗒”的序列毫无必要的冗长。
我们可以加长码字至 5位或更长, 5位长的码字又提供了额外的
32(2×2×2×2×2或25)
个码字。一般而言,这就足够 10个数字和 16个标点符号使用。实
际上,摩尔斯电码中的数字 确实是5位的,但在许多其他编码方式
中, 5位码字常用于重音字母而不是标点符号。
为了包含所有的标点符号,系统必须扩充至 6位表示,提供 64个
附加编码,此时系统可表 示2+4+8+16+32+64共126个字符。这对摩
尔斯电码而言太多了,以至于留下许多“未定义” 的码字。此处“未定义”指不代表任何意义的码字,如果在你接收的摩尔斯电码中有
未定义 的码字,就可以肯定发送方出了差错。
由于推出了下面这条公式:
码字数 = 2“滴”与“嗒”的数目 我们就可以继续导出更
长的码字位数所代表的码字数目。很幸运,我们不必为确定码字数
目 而写出所有可能的码字,我们所要做的不过是不断地乘 2而已:点划数 码字数
1 21 = 2
2 22 = 4
3 23 = 8
4 24 = 16
5 25 = 32
6 26 = 64
7 27 = 128
8 28 = 256
9 29 = 512
10 210 = 1024
摩尔斯电码被称为 二元码 (binary code ),因为编码中仅
含“滴”和“嗒”。这与一个硬 币很相似,硬币着地时只可能是正面或
反面。二元事物(例如硬币)、二元编码(例如摩尔斯 电码)常
常用 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(26)。
因此,布莱叶编码系统可以代表 64个不同的码字。以下就是所有
的 64个码字:
如果我们发现布莱叶编码只用了 64个码字中的一部分,我们会疑
问为什么 64个码字中有
一些不被使用;如果发现布莱叶编码使用了多于 64个的码字,则又会让人怀疑我们是否神志 清醒或数字计算的真实性, 2乘2是等于4吗?
分析布莱叶编码,还是从基本的小写字母开始:第3章 布莱叶盲文与二元编码 11
举例来说,短语“ 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
O)。显然水既不同于氢气,也不同于氧气。同样,食 盐分子由一
个钠原子和一个氯原子构成,而钠和氯都不可能成为法国馅饼的调
味品。 2
氢、氧、钠、氯都属于元素,水和食盐都属于化合物。但是盐水
是一种混合物,而不是 化合物,因为其中水和食盐都保持它们各
自的性质不变。
一个原子的电子数通常等于其质子数。但在某种特定环境下,电
子能从原子中电离出来, 这样电就产生了。
单词electron和electricity都源于古希腊词
hlek ron(elektron),你可能猜它的意思就是“极 其微小而不
可见的东西”。但事实并非如此—hlek ron的真正意思
是“琥珀”,一种玻璃状 的硬质树液。这个看似不相关的词源来自于
古希腊人所做的实验,他们用琥珀与木头相摩擦 而产生我们今天
所说的静电。在琥珀上摩擦木头使木头从琥珀获得电子,结果木头
所含的电 子数多于质子数而琥珀所含的电子数小于质子数。在更
多的现代实验中,地毯能从鞋底获得 电子。
质子和电子具有带电荷的特性,质子带正电荷( +)、电子带负
电荷(-)。中子是中性的, 不带电。即便我们用加减号来标明质子和电子,但符号并不表示算术运算中的加号和减号的 意思,也不表示质子拥有某些电子所不具备的东西。使用这些符号仅仅表
示质子和电子在某 个方面性质相反。这个相反的特性也正表明了
质子和电子是如何相互关联的。
当质子数与电子数相等时,它们是最适合和最稳定的。质子数与
电子数的不平衡会导致 它们趋于平衡。静电火花就是电子运动的
结果,是电子从地毯通过你的身体再流回到鞋子的 过程引起的。
描述质子和电子关系的另一条途径是注意观察异电性相吸同电性
相斥的现象,但光凭看 原子结构图我们是不能猜想到的。表面上
看原子核中挤在一起的质子是互相吸引的。质子是 通过比同性斥
力大的某种力聚合在一起的,这种力叫强内力。释放核能的原子核
裂变就是由 于强内力导致的。本章只讨论通过得失电子获得电
(电能)的问题。
静电不只存在于手指触摸门把手时闪出的火花之中。暴风雨时,云
层的下层积累电子而云层的顶层失去电子,闪电的瞬间,电子的不平衡马上消失。闪电
正是大量的电子迅速从一 端转移到另一端的结果。
手电筒电路中的电能显然比电火花或闪电之中的电能要好利用得
多。灯泡能稳定持续地 亮是因为电子并不是从一点跳到另一点。
当电路中的一个原子把一个电子传给邻接的另一个 原子时,它又
从另一个邻接的原子获得电子,而这个原子又从它的一个邻接原子
获得电子, 如此依次循环。可见电路中的电就是从原子到原子的
电子通路。
这不可能自发形成。仅仅只把一些破旧的电路材料连接在一起是
不可能有电能产生的, 需要某种可以激发电子环绕电路移动的物
质。再分析一下前面所画的简单手电筒电路图,可 以肯定激发电
子运动的既不是电线,也不是灯泡,那么最有可能的就是电池了。
几乎每一个人都多少了解手电筒里所用电池的类型方面的一些知
识:
· 它们都呈管状,且大小不同。比如有 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安的保险丝”。 当6
240 000 000 000 000 000个电子在 1秒内流过一个特定的点时,就是
1安培电流。
用水和水管作个类比。电流与流经水管的水量很相似,而电压类似
于水压,电阻类似于
水管的粗细程度—水管越小、阻力越大。因此水压越高,流过水管
的水量越大;水管越小, 流过它的水量就越少。流过水管的水量
(电流)与水压(电压)成正比而与水管的阻力(电 阻)成反
比。在电学中,如果知道电压和电阻的大小,就可计算出电流的大
小。电阻—物质阻碍电流 通过的能力 —用欧姆度量,得名于
Georg Simon Ohm (1789—1854),他提出了著名的欧姆定 律,定律
中表述这里I表示电流, E表示电压, R表示电阻。 举个例子,让我们看
一节空置的电池:I=ER它的电压 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毫安。这就意味着每秒钟有 4 680 000 000 000
000 000 个电子通过灯泡。(注意,如果你用欧姆表直接测量手电
筒灯泡的电阻,你只会得到 一个比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。
然而,数字不那么容易随文化的不同而改变。不论那种语言,也
不管怎样读那些数字, 地球上我们能够遇到的几乎所有的人都用
同样的方式来写数字:
数学,从某种意义上来说是不是可以称得上是一种世界语言呢?
毫无疑问,数字是我们平时能够接触到的最抽象的代码。当你看到
数字“ 3”时并不需要
立即将它和任何事情相联系。你可能将它设想为 3个苹果或者 3个
其他什么东西,但是当你从 上下文中得知这个数字是指某个小孩
的生日、电视频道、曲棍球比赛的得分或者是制作蛋糕 的食谱中
提供的需要面粉的杯数时,也能够像认为它代表 3个苹果时一样自
然。因为数字一开 始产生时就很抽象,所以让我们理解这些苹
果:并不一定要用符号“3”来表示就更困难了。本章的很大一部分以及
下一章将来讲解这些苹果:
也可以用“ 11”的形式来表示。
先不讨论数字 10与生俱来的特殊性。大多数人使用的数字系统
是基于 10(有时候是 5)的, 这种情况并不奇怪。最初人们是用
手指来数数的。要是人类进化成有 8个或12个手指,人类计 数的方
式就会有所不同。英语 Digit(数字)这个单词也可以指手指或脚
趾,单词 five(五)和 单词fist(拳头)有相同的词根,这种情况
并不是巧合。
这样看来,人类选择使用以 10为基础的记数方法(或称为十进
制记数法)完全是任意的, 但我们赋予 10的整数次幂重大的意
义,并给它们命名:十个一年是一个十年;十个十年是一 个世
纪;十个世纪是一个千年;千个一千是百万;千个百万是十亿。下
面是 10的各次幂:
101 = 10
102 = 100
103 = 1000(千)
104 = 10 000
105 = 100 000106 = 1 000 000(百万)
107 = 10 000 000
108 = 100 000 000
109 = 1 000 000 000(十亿)多数历史学家认为数字最初创造出来是用来数东西的,比如:人
数、财产数、商品交易 量等。举个例子来说,假定某个人有 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-Musa al-Khwarizmi(由它的名字得到单词
algorithm(算法))在大约公元 825年写了一本代数书, 书中用的
就是印度的数字系统(阿拉伯数字)来计数。产生于公元 1120年
的拉丁文译本对整 个欧洲用现在的阿拉伯数字代替当时使用的罗
马数字的过渡过程产生了很大的影响。
印度—阿拉伯数字系统与先前的数字系统相比在以下三个方面不
同:
· 印度-阿拉伯数字系统是和位置相关的,也就是说,一个数字依据
位置的不同代表不同 的数量。数字的位置和数字的大小一样,都
是很重要的。(但实际上,数字的位置更重 要。)100和1 000 000
中都只有一个 1,但我们知道一百万比一百要大得多。
· 几乎所有早期的数字系统都有一个阿拉伯数字所没有的东西,那
就是用来表示数字 10的 一个专门的符号。现在使用的数字系统中
是没有代表 10的专门符号的。
· 另一方面,几乎所有早期的数字系统都缺少一个阿拉伯数字中有
的,而且事实证明是比 代表数字 10的符号重要得多的符号,那就
是零。 是的,就是零。这个小小的零毫无疑问是数字和数学历史
上最重要的发明之一。它支持
位置表示法,因为它可以将 205与250区别开来。数字零也使得
与位置无关的数字系统中非常 复杂的运算变得简单,尤其是乘除
法。
印度—阿拉伯数字的整体结构是以读它们的方式展现的。拿
4825作为例子,我们把它读 作“四千八百二拾五”,意思是:或者,可以将它的组成写成这样:四个一千 八个一百 两个十 一个五4825=4000+800+20+5
或者,可以将它进一步分解,写成这样:
4825=4×1000+
8×100+
2×10+
5×1
另外,也可以使用 10的整数次幂的形式,重新写成:
4825=4×103+
8×102+
2×101+
5×100
记住,任何数的 0次幂都等于 1。
多位数中的每位都有特定的意义,如下图所示。这 7个方格可以
表示从 0~9 999 9999的任 何一个数字:1的个数
10的个数
100的个数
1000的个数
10 000的个数
100 000的个数
1 000 000的个数
每一个位置(位)与 10的一个整数次幂相对应。不需要一个专
门的符号来表示数字 10, 因为可以将 1放在不同的位置,用 0作为
占位符。
分(小)数可以同样的形式作为数字放在十进制数的小数点的右
边,这一点非常好。数字 42 705.684是:
4×10 000+
2×1000+
7×100+
0×10+
5×1+
6÷10+
8÷100+
4÷1000
该数也可以写成不带除法的形式,如下:
4×10 000+
2×1000+
7×100+
0×10+
5×1+
6×0.1+
8×0.01+
4× 0.001或写成10的整数次幂的形式:4×104+
2×103+
7×102+
0×101+
5×100+
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为基础组织起来的,就不需要这样的一个符
号:
把这个符号拿给任何一个卡通人物看,都会有同样的反应:“那
是什么?它是干什么用 的?”如果再仔细想一会儿的话,你会发现
连这样的一个字符也不需要:
在十进制数字系统中,没有专门用来表示 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的数字以外,它基本上和数十进制的数
是一样的。当然,相同的数字代表的数量是不同的:0、1、2、3、4、5、6、7、10、11、12、13、14、15、16、17、20、21、22、23、24、25、26、27、30、31、32、33、34、35、36、37、40、41、42、43、44、45、46、47、50、51、52、53、54、55、56、57、60、61、62、63、64、65、66、67、70、71、72、73、74、75、76、77、100...
最后一个数字读作“么零零”,是卡通人物拥有的手指数自乘的结果
(即平方)。 在写十进制或八进制数时,为避免混淆,可以借助
使用特定的标记以区别表示数字系统。
下面用标记“ TEN”表示十进制数,标记“ EIGHT”表示八进制数。这样,白雪公主遇到的小矮人的数目是 77
TEN
或EIGHT卡通人手的手指数是 810
TEN
或EIGHT贝多芬写的交响乐的首数是 911
TEN
或EIGHT人的手指的数目是 10
一年中的月份数是 1212
TEN
或
14
或 TENEIGHT EIGHT两个星期所包含的天数是 14
“情人”的生日庆祝会是 1616
TEN
或
或20EIGHTTEN
一天中所包含的小时数是 24EIGHT
或30拉丁字母表中的字符数是 26TEN
32
或 TEHEIGHT
EIGHT与一夸脱液体相当的盎司数为 3240
TEN
或EIGHT一副牌中含有的牌数是 5264
TEN
或EIGHT国际象棋棋盘的方格数是 64100
TEN
或EIGHTSunset Strip 最著名的 17牌号是77TENor 115EIGHT美式足球场的面积是 100144
TEN
或EIGHT参加温布尔登网球公开赛女单初赛的人数是 128200
TEN
或EIGHT古埃及孟斐斯城市面积的平方英里数是 256TENor 400EIGHT注意,在上面一系列的八进制数中,有一些好整数,像 100EIGHT、200EIGHT、 400EIGHT。好整数通常是指结尾有一些零的数。在结尾处有两个零的十进制数意味
着它是 100TEN即10TEN
乘以10
TEN;在八进制数中,结尾处有两个零表示它是 100EIGHT即10EIGHT乘以 10EIGHT(或 8TEN乘以 8TEN
,等于 64TEN)。你可能已经注意到了,好的八进制整数 100200
EIGHT
、400
EIGHT
和EIGHT与十进制数64128
TEN
、TEN
、256相等,它们都是 2的整数次幂。例如, 4004
EIGHT
等于EIGHT乘以1010
EIGHT
乘以EIGHT,所有这些数都是 2的整数次幂。任何时候,将 2的整数次幂和另一个 2的整
数次幂相乘,得到的仍是 2的 TEN
整数次幂。
下表给出了一些 2的整数次幂的十进制及其对应的八进制的表示形
式:
2的整数次幂 十进制数 八进制数
20 1
21 2
22 4
23 8
24 16
25 32
26 64(续)
27 128
28 256
29 512
21
0
1024
211 2048
21
2
4096
最右边一列的好整数给我们一个暗示:十进制以外的数字系统可能
对使用二元码有所帮
助。
八进制数字系统和十进制数字系统在结构上没有什么差别,只是
在细节上有一些差异。 例如,八进制数的每一个位置代表的值是
该位数字乘以 8的整数次幂的结果:
1的个数
8的个数
64的个数
512的个数 4096的个数
32768的个数这样,八进制数 3725
EIGHT可以拆分成这样:3725EIGHT= 3000EIGHT+ 700EIGHT+ 20EIGHTEIGHT
+ 5还可以写成另外几种不同的形式。下面就是其中的一种,采用十进
制形式的 8的整数次幂:3725EIGHT= 3×512TEN
+7×64TEN
+采用八进制形式的 8的整数次幂的情况:2×8
5×1TEN
+3725EIGHT= 3 ×1000
7×100EIGHT
+
+还有另外的一种拆分形式:2×10
5×1EIGHT
EIGHT
+3725EIGHT= 3×83+
7×82+
2×81+
5×80如果算出其十进制的结果,会得到 2005。这就是将八进制数转换成十进制数的方法。可以采用与做十进制加法和乘法相同的办法来做八进制数的加法
和乘法。唯一真正的区别 在于要采用不同的表格来对各个数字进
行乘法或加法运算。下面是八进制数的加法表: TEN例如, 5EIGHTEIGHT
+ 7= 14EIGHT。可以采用与做十进制加法相同的方法将两个稍长一点儿的八进制数相加:
135
+ 643
1000
先从最右边的一列做起, 5加上3等于 10,该位写下 0,向前进
1;1加3加4等于10,该位写 下0,向前进 1;1加1加6等于10。
同样,在八进制中, 2乘以2仍然等于 4。但是 3乘以3却不等于 9,那是多少呢? 3乘以 3等于11EIGHT
,此数与 9TEN所代表的数量相等。下图是完整的八进制数的乘法表:这里,4×6等于30,也即表明 30EIGHT和4×6的十进制结果 24是等值的。八进制数字系统与十进制数字系统一样,都是有效的,但八进制数
字系统在理解上更深 EIGHT
TEN
了一层。既然我们已为卡通人物开发出了一套数字系统,就再给龙
虾开发一套适合它们用的 数字系统吧。龙虾根本没有手指,但它
两只前爪的末端都有螯。适合于龙虾的数字系统是四进制数字系统或称为基于 4的数字系统:四进制数可以这样来数:
0、1、2、3、10、11、12、13、20、21、22、23、30、31、32、33、100、101、102、103、110,等等。 这里不打算在四进制数上花太多的时间,因为
还有更重要的事情要做。但我们还是要看
一下四进制中的每一位是怎样和 4的某个整数次幂相对应的:
1的个数
4的个数
16的个数
64的个数
256的个数
1024的个数四进制数 31232可以写成:31232FOUR= 3 ×256
1×64TEN
+
+TEN
2×16 +
TEN也可以写成:3×4
2×1TEN TEN
+31232FOUR= 3 ×10000+
FOUR1×1000FOUR
+2×100FOUR
+3×10
2×1FOUR
+还可以写成:31232FOURFOUR
=3×44+
1×43+
2×42+
3×41+
2×40如果以十进制数的形式计算其结果,就会发现 31232FOUR等于878TEN。现在,我们要做一个跳跃并且是最远的一跳。假定我们是海豚,并
且必须用两鳍来数数。
则这个数字系统就是基于 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、??
这些数看起来好像很大,实际上并不是这样。更准确地说二进制
数长度增长的速度要快 过二进制数增大的速度:每个人的头的个数为 1TEN
或1TWO海豚身上的鳍的个数为 2TEN
或10TWO一个大汤匙中包括的小茶匙的数目为 3TEN
或11TWO正方形的边数为 4或100TWO每个人一只手的手指数为 5
TEN或101TWO一种昆虫的腿数为 6
TEN
一星期的天数为 7或110
或111
TENTWOTENTWO八重奏中音乐家的个数为 8TEN或 1000TWO太阳系中的行星(包括冥王星在内)总数为 9
TEN或1001TWO牛仔帽重量以加仑计算为 10
TEN
等等。或1010TWO在多位二进制数中,数字的位置和 2的整数次幂的对应关系为:
1的个数
2的个数
4的个数
8的个数
16的个数
32的个数
因此,任何时候由一个 1后跟几个零构成的二进制数一定是 2的整
数次幂。 2的幂与二进制数中零的个数相等。下面是扩充的 2的各次幂的表,可用来说明这
条规则:
2的幂
20
十进制数
1
八进制数
1
四进制数
1
二进制数
1
21 2 2 2 10
22 4 4 10 100
23 8 10 20 1000
24 16 20 100 10000
25 32 40 200 100000
26 64 100 1000 1000000
27 128 200 2000 10000000
28 256 400 10000 100000000
29 512 1000 20000 1000000000
21 0 1024 2000 100000 10000000000
211 2048 4000 200000 100000000000
21 2 4096 10000 1000000 1000000000000
假定有一个二进制数 101101011010,它可以写成:101101011010TWO= 1×2048TEN
+0×1024
1×512TEN
+
+1×256TEN
+TEN
0×128 +
TEN1×64TEN
+0×32
1×16TEN
+
+1×8TEN
TEN
+0×4
1×2TEN
+
+TEN
0×1也可以这样写:101101011010TWOTEN
= 1×211+
0×210+
1×29+
1×28+
0×27+
1×26+
0×25+
1×24+
1×23+
0×22+
1×21+
0×20如果将各个部分以十进制数的形式相加,得到
2048+512+256+64+16+8+2=2906TEN。将二进制数转换成十进制数非常简单,你可能更喜欢借助已准备好
的模板进行转换:×128×64 ×32×16 ×8×4 ×2 ×1这个模板允许你转换最大长度为 8的二进制数,但它扩充起来非
常容易。使用时,将 8个 二进制数字放到上部的 8个小盒子中,一
个盒子放一个数字。做 8个乘法运算,将结果分别放
到底部的 8个小盒子中。将 8个盒子中的数字相加就得到最终结
果。下面是将 10010110转化成 十进制数的例子:×128×64×32 ×16 ×8 ×4 ×2 ×1将十进制数转换成二进制数就没那么直接了。但这里也有一个帮
助你将 0~225范围内的 十进制数转换成二进制数的模板:
实际转化过程要表面上看的麻烦得多,所以一定要仔细按照下面
的指导来做。将整个十 进制数(应小于等于 225)放在左上角的方
格中。用除数( 128)去除那个数(被除数),如下 图所示。将商
写在正下方的盒子中(即左下角的盒子中),余数写在右边的盒子
中(即上面一 行左数第二个盒子中)。用第一个余数再除以下一
个算子 64。依照模板的顺序用同样的方法继 续做下去。
记住,每次求得的商只能是 0或者1。如果被除数小于除数,商
为 0,余数和被除数相等; 如果被除数大于除数,商为 1,余数为
被除数与除数之差。下面是将 150转换成二进制数的过 程:如果要做两个二进制数的加法或乘法,也许直接采用二进制来做
比转化成十进制再做还 要简单。这将是你真正喜欢二进制数的地
方。如果只需记住下面的二进制加法表就可以做加 法运算,也就
不难想象掌握加法运算该有多快: + 0
0 0
1 1
用二进制加法表将两个二进制数相加:1 1 0 0 1 0 1
+ 0 1 1 0 1 1 0
1 0 0 1 1 0 1 1
从最右边的一列开始做起: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下面是13TEN
与11以二进制数的形式做乘法的过程:1 1 0 1
TEN
× 1 0 1 1
1 1 0 1
1 1 0 1
0 0 0 0
1 1 0 1
1 0 0 0 1 1 1 1最后结果是 143TEN。人们在使用二进制数的时候通常将它们写成带有前导零的形式(即
第一个 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 10
1011 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 22
10111 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的个 数,但如果
看到的是 12 000 000,则马上就能知道是一亿两千万。
二 进 制 数 的 位 长 度 增 加 得 特 别 快 。 例 如 , 一 亿 两 千
万 的 二 进 制 表 示 为 : 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是怎样通知美国人英国殖民者入侵的消息时
不一定与史实完全一致,但 他的确提供了一个利用比特传递信息
的令人茅塞顿开的例子:
(他告诉他的朋友:“如果英军今晚入侵, 你就在北教堂的
钟楼拱门上悬挂点亮的提灯 作为信号。一盏提灯代表英
军由陆路入侵, 两盏提灯代表英军由海路入侵。?? )
也就是说, Paul Revere 的朋友有两盏灯。如果英军由陆路入
侵,他就挂一盏灯在教堂的 钟楼上;如果英军由海路入侵,他就
挂两盏灯在教堂的钟楼上。
然而,朗费罗并没有将所有的可能都涉及到。他留下第三种情况
没有说,那就是英军根 本就没有入侵的情况。朗费罗已经暗示第
三种可能的信息可以由不挂提灯的方式来传递。让我们假设那两盏灯是永久固定在教堂钟楼上的。在正常情况下,它们都不亮:
这就是指英军还没有入侵。如果一盏提灯亮:或
表示英军正由陆路入侵。如果两盏提灯都亮:表示英军正由海路入侵。
每一盏提灯都代表一个比特。亮着的灯表示比持值为 1,未亮的
灯表示比特值为 0。前面 奥兰多已经说明了传送只有两种可能性的
信息只需要一个比特。如果 Paul Revere 只需被告知 英军正在入侵
(不管是从何处入侵)的消息,一盏提灯就足够了。点亮提灯代表
英军入侵, 未点亮提灯代表又是一个和平之夜。
传递三种可能性的消息还需要再有一盏提灯。一旦再有一盏提
灯,两个比特就可以通知 有四种可能的信息:
00=英军今晚不会入侵
01=英军正由陆路入侵
10=英军正由陆路入侵
11=英军正由海路入侵
Paul Revere 将三种可能性用两盏提灯来传送的做法事实上是相当
富有经验的。用通信理 论的术语说,他采用了冗余的办法来降低
噪声的影响。通信理论中的噪声是指影响通信效果 的任何事物。
电话线路中的静电流显然是影响电话通信的一种噪声。然而,即使
是在有噪声 的情况下,电话通信仍能够成功,因为口语中存在大
量的冗余。你同样可以听懂对方的话而 无需将每个音节、每个字
都听得很清楚。
在上述例子中,噪声是指晚上光线黯淡以及 Paul Revere 距钟楼
有一定的距离,它们都阻 碍了Paul Revere声将钟楼上的两盏灯区分
清楚。下面是朗费罗的诗中很重要的一段:
(哦!他站在与钟楼等高的位置观察, 一丝微光,然后,有一盏灯亮了! 他跳上马鞍,调转马头, 徘
徊,凝视,直到看清所有的灯 另一盏灯也亮了!)
那当然不是说 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的Movie Video 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=MAJOR BOMB
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位数字。
如果所有的区号都使用的话(实际上有一部分区号并没有使用,将它们
忽略),一共有 103或
1000个代码,从 000~999。区号为 212的7位数的电话号码有多少
种可能呢? 107或10 000 000
个;区号为 212并且以260开头的电话号码有多少个呢? 104或10
000个。 同样,在二进制数中,可能的代码数等于 2的比特位数次幂: 比特位数 代码数
1 21 = 2
2 22 = 4
3 23 = 8
4 24 = 16
5 25 = 32
6 26 = 64
7 27 = 128
8 28 = 256
9 29 = 512
10 21 0 = 1024
每增加一个比特位,二进制代码数翻一番。 如果知道需要多少个
代码,那么怎样才能知道需要多少个比特位呢?换句话说,在上述
表中,如何才能由代码数反推出比特位数呢?
用到的方法叫作取以 2为底的对数,对数运算是幂运算的逆运算。
我们知道 2的7次幂等于128,以2为底的128的对数就等于 7。用数学记号来表示第一个句
子为:
27 = 128它与下述句子等价:log 128 = 7
2因此,如果以 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
50 64
100 125
200 250
400 500
800 1000
1600 20003200 4000
为ASA等级编码需要多少个比特呢?答案是 5个比特。我们知
道, 24=16,与24比太小了; 25 = 32 ,又超过了所需的编码数。比特值与胶片速度的对应关系如下所示:
方格
2
0
方格
3
0
方格
4
0
方格
5
1
方格
6
0
胶片速
度
25
0 0 0 0 1 32
0 0 0 1 1 40
1 0 0 1 0 50
1 0 0 0 1 64
1 0 0 1 1 80
0 1 0 1 0 100
0 1 0 0 1 125
0 1 0 1 1 160
1 1 0 1 0 200
1 1 0 0 1 250
1 1 0 1 1 320
0 0 1 1 0 400
0 0 1 0 1 500
0 0 1 1 1 640
1 0 1 1 0 800
1 0 1 0 1 1000
1 0 1 1 1 1250
0 1 1 1 0 1600
0 1 1 0 1 2000
0 1 1 1 1 2500
1 1 1 1 0 3200
1 1 1 0 1 4000
1 1 1 1 1 5000
多数现代的 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(universalproduct code,通用产品 代码),即日常所购买的几乎所有商品包
装上的条形码。条形码已经成为计算机在日常生活中 应用的一种
标志。
尽管UPC常常使人多疑,但它确实是一个无辜的小东西,发明出
来仅仅是为了实现零售 业的结算和存货管理的自动化,且其应用
是相当成功的。当它和一个设计精良的结算系统共 同使用时,顾
客可以拿到列出细目的售货凭条,这一点是传统现金出纳员所无法
做到的。
有趣的是, UPC也是二进制代码,尽管它初看起来并不像。将
UPC解码并看看 UPC码具体是怎样工作的是很有益的。
通常情况下, UPC是30条不同宽度的垂直黑色条纹的集合,由不同
宽度的间隙分割开, 3
其下标有一些数字。例如,以下是 Campbell公司10 盎司的罐装
鸡汁面包装上的 UPC: 4
可将条形码形象地看成是细条和黑条,窄间隙和宽间隙的排列形
式,事实上,这是观察条 形码的一种方式。黑色条有四种不同的
宽度,较宽的条的宽度是最细条的宽度的两倍、三倍 或者四倍。
同样,各条之间的间隙中较宽的间隙是最窄间隙的两倍、三倍或者
四倍。
但是,看待 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=61101100=2 1000100=7
1000010=3 1001000=8
1011100=4 1110100=9
这些代码都是前述代码的补码或补数:凡是 1的地方都换成 0,凡是 0的地方都换成 1。这 些代码都是以 1开始,以零结束,并且
每组都有偶数个 1,称之为偶校验。
现在,可以对 UCP进行解码了。借助前两个表格, Campbell公司
10 3 盎司的罐装鸡汁面 4的包装上用 UPC编码的12个数字是:0 51000 01251 7这个结果是令人失望的,正如你所看到的那样,它们和印在 UPC底
部的数字完全相同。(这样做是有意义的,因为由于某种原因,扫描仪可能无法识别条
形码,收银员就可以手工将 这些数字输进去。)我们还没有完成
解码的全部任务,而且,我们也无法从中解码任何秘密信 息。然
而,关于 UPC的解码工作已经没有了,那 30个竖条已经变成了 12
个数字。
第一个数字(在这里是 0)被称为数字系统字符, 0的意思是说
这是一个规范的 UPC编码。 如果是具有不同重量的货物的
UPC(像肉类或其他商品),这个数字是 2;订单、票券的 UPC
编码的第一个数字通常是 5。
紧接着的 5个数字是制造商代码。在上例中, 51000是 Campbell 鸡
汁面公司的代码。
Campbell公司生产的所有产品都使用这个代码。再后面的 5个数字
( 01251)是该公司的某种 3
产品的编号,上例中是指 10 4 盎司的罐装鸡汁面。别的公司的鸡汁
面可能有不同的编号,且
01251在另外一个公司可能是指一种完全不同的产品。
和通常的想法相反, UPC中没有包含该种产品的价格。产品的价
格信息可以从商店中使 用的与该扫描仪相联的计算机中检索互
到。
最后的数字(这里是 7)称作模校验字符,这个字符可用来进行
另外一种错误检验。为了 解释校验字符是怎样工作的,将前 11个
数字(是 0 51000 01251)各用一个字母来代替:
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”中的四个布莱
叶字母符号就可以简单地写成:100100 101010 100110 100010
最左边的一位对应编号为 1的位置,最右边的一位对应编码为 6的
位置。 正如前面所讲到的,比特可以代表单词、图片、声音、音
乐、电影,也可以代表产品编
码、胶片速度、电影的受欢迎程度、英军的入侵以及某人所挚爱的
人的意愿。但是,最基本 的一点是:比特是数字。当用比特表示
信息时只要将可能情况的数目数清楚就可以了,这样 就决定了需
要多少个比特位,从而使得各种可能的情况都能分配到一个编号。
比特在哲学和数学的奇怪混合物—逻辑—中发挥作用。逻辑最基
本的目标是证明某个 语句是否正确,正确与否也可以用 1和0来表
示。第10章 逻辑与开关
真理是什么呢?亚里士多德认为逻辑与它有关。他的讲义合集
《工具论》(Organon,可 追溯到公元前 4世纪)是最早的关于逻
辑的详细著作。对于古希腊人而言,逻辑是追寻真理的 过程中用
于分析语言的一种手段,因此它被认为是一种哲学。亚里士多德的
逻辑学的基础是 三段论。最有名的三段论(它并非是在亚里士多
德的著作中发现的)是:
(所有的人都是要死的 ; 苏格拉底是人 ; 所以,苏格
拉底是要死的。 )
在三段论中,两个前提被假设是正确的,并由此推出结论。 苏格
拉底之死这个例子看上去似乎太直白了,但还有许多其他不同的三
段论。例如,考
虑下面两个由 19世纪数学家 Charles Dodgson(也就是 Lewis
Carroll)提出的前提:(所有的哲学家都是有逻辑头脑的 ;
一个没有逻辑头脑的人总是顽固的。 )
它所能推出的结论一点儿也不明显。(事实上,结论是“一些顽
固的人不是哲学家 (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。 这样,刚
才的表达式可以写成下面的形式:
(M AND N AND (W OR T))OR(F AND N AND (NOT W))OR B
这与你的口头描述已经十分接近了。注意圆括号是如何清楚地表
达出你的意图的。你想 要的猫来自下面三个集合之一:
(M AND N AND(W OR T ))
或
(F AND N AND (NOT W ))
或
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
0 0
1 0
当用+表示OR时,可能的结果是:0+0 = 0
0+1 = 1
1+0 = 1
1+1 = 1
当+的左、右操作数中有一个为 1时,结果就是 1。除了 1+1=1这
种情况,这种计算和普通 加法产生的结果是一致的。可用另一张
小表来总结: OR 0
0 0
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
0 0
1 0
这个简单的电路实际上执行了布尔代数的“ 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
0 0
1 1
这意味着两个并联的开关执行的是和布尔一样的操作。 当你再进
入宠物店时,你告诉店员:“我想要一只阄过的公猫,白的或黄褐
色的均可;或
者要一只没生育能力的母猫,除了白色,其他任何颜色均可;或者
只要是只黑猫,我也要。” 店员便得到了如下的表达式:(M×N×(W+T))+(F×N×(1-W))+B
现在你知道两个串联开关执行的是逻辑与( AND,由符号×来表
示),两个并联开关执行 的是逻辑或( OR,由符号 +来表示),你可以按如下方法连接 8个开关:
这个电路中的每一个开关都被标上了一个字母 (与布尔表达式中
所用字母相同 )。 W 表示 非W,是1-W的另一种写法。事实上,如果按从左至右,从上至下的顺序来阅读这个电路图, 你遇到的
字母的顺序和它们在布尔表达式中出现的次序是一样的。表达式中
的乘号(×)都对应 角是电路图中串联的两个或两组开关的位置;表
达式中的加号 (+)号对应的是电路图中并联的 两个或两组开关的位
置。
你应该记得,店员最先挑出的是只未阄过的褐色的公猫。闭合相应
的开关:
尽管M、T和非W这三个开关都闭合了,但没有构造出一个完整 ......
假若你才 10岁,你的好朋友与你临街而住,而且你们卧室的窗
户面对着面 。每天晚上, 当父母像平常一样很早催你上床睡觉
时,你可能还想与好朋友交流思想、发现、小秘密、传 闻、笑话
和梦想,没有人可以责备你,毕竟 ,渴望交流是大多数人的天性。
当你们卧室还亮着灯时,你和你的好朋友可以临窗舞动手臂、打
手势或以身体语言来交 流思想,但复杂一些的交流就有些困难
了。而且一旦父母宣布“熄灯”,交流也就无法继续进 行了。
如何联系呢?用电话吗? 10岁的小孩子屋里有电话吗?即使
有,你们的谈话可能被偷听。 如果家里的电脑通过电话线联了
网,它可能会提供无声的帮助,不过很不幸,它也不会在你 的房
间里。
你和朋友采用的方法是用手电筒。所有的人都知道手电筒是为孩
子们藏在被窝里看书而 发明的,它也适合在黑暗中用来交流。它
无声无息,且光的方向性很好,不会从卧室的门缝 中泄露而使家
人起疑。
用手电筒的光可以交谈吗?这值得一试。一年级你就学过在纸
上写字母和单词,把这种 方法运用到手电筒上看起来也合情合
理。你所需做的就是临窗而站,用光画出字母。画字母 ‘O’,就打
开电筒,在空中画个圈,然后关上开关;字母‘ I’则是画竖直的一
笔。但是你很 快发现这种方法行不通,当你注视来去飞舞的光柱
时,会发现在脑海中将它们组合起来不是 件容易的事,这些光划
成的圈圈杠杠太不准确了。
也许你曾经看过一部电影,影片中两个水手隔海用闪烁的光传递
消息。在另一部电影中, 一个间谍用镜子反射阳光向一间屋子中
被俘获的同伙发送讯息。这就给了你启发,你起先设 计一种简单
的交流方法,使字母表中的每个字母与一定数目的闪烁相对应。 A
闪一下, B闪两 下,C闪三下,如此递推, Z就闪烁 26下。BAD这
个词由字母间有间隔的两闪、一闪、四闪组 成,这样你不会误以
为它是闪七下的字母 G了。词间的停顿则比字母间的停顿时间稍长一些。
这看起来很有希望,采用这种方法的优点是你不需要在空中挥舞
手电简,只需对准方向 按开关就行了;缺点是你试图发送的第一
个消息(“How are you?” )就需要 131次闪烁,更 糟的是,你忘了
定义标点符号,所以无法表示句尾的问号了。
这离问题的解决已经很近了,你想别人以前肯定也遇到过类似的
问题,你解决它的思想 一定是正确的。为了解决问题,白天的图
书馆之行使你发现了神奇的摩尔斯电码(morse code), 这正是你
想要的,即使你不得不重新学习如何“写”字母表中的字母。
以下就是区别:在你发明的体系中,每个字母是一定数目的闪
烁,从闪烁一下的 A到闪烁 26的Z;而在摩尔斯电码中,有长短两
种闪烁,当然,这会使摩尔斯电码更为复杂,但它在实 际应用中
却被证实是更有效的。那句“ How are you?”现在仅需 32次而不是
131次闪烁,而 且这还包含了问号。
在讨论摩尔斯电码的工作原理时,人们并不说“长闪烁”、“短闪
烁”,他们使用“点
(dot)”和“划( dash)”,因为这样易于在印刷品上表示。在摩尔斯电
码中,字母表中的每一个字母与一个点划序列相对应,正如在下表中你所看到的:
尽管摩尔斯电码与计算机毫不相关,但熟悉它的本质却对深入了
解计算机内部语言和软 硬件的内部结构有很大的帮助。
在本书中,编码或代码( code)通常指一种在人和机器之间进行
信息转换的系统(体系)。 换句话说,编码便是交流。有时我们
将编码看成是密码 (机密),其实大多数编码并不是的。大 多数的编
码都需要被很好地理解,因为它们是人类交流的基础。
在《百年孤独》的一书的开篇,马尔克斯回忆了一个时代,那
时“世界一片混沌,许多 事物没有名字。为了加以区别才给事物各
个命名。”这些名字都是随意的,没有什么原因说明 为什么不把猫
称为狗或不把狗称为猫。可以说英语词汇就是一种编码。
我们用嘴发出声音组成单词,这些词可以为那些听得到我们声音,理解我们所用语言的 人所听懂,我们称这种编码为“口头语
言”或“语音”。对写在纸上(或凿在石头上、刻在木 头上或通过比
划写在空气中)的词,还有一种编码方式,那就是我们在印刷的报
刊,杂志和 书籍上看到的字符,称之为“书面语言”或“文本”。在许
多语言中,语音和文本间有很强的 联系。例如在英语中,字母或
一组字母与一定的读音相对应。
手势语言的发明帮助了聋哑人进行面对面的交流。这是一种用手
和胳膊的动作组合来表 达词语中的单个字母、整个词及其基本概
念的语言。对盲人来说,他们可以使用布莱叶盲文
(Braille)。这种文字使用凸起的点代表字母,字母串和单词。当
谈话内容要被迅速地记录下 来时,缩写和速记是很有用的。
人们在相互沟通时使用了各种不同的编码,因为在不同的应用场
合,其中的一些较其他 的更为简便。例如,语言不能在纸上存
储,所以使用了文字;语言、文字不适合用来在黑夜 中安静地传
递消息,故摩尔斯电码是一个方便的替代品。只要一种编码可以适
用于其他编码 所不能适用的场合,它就是一种有用的编码。
以后将看到,计算机中使用了不同的编码来传递和存储数字、声
音、音乐、图像和视频
(电影)。计算机不能直接处理人类世界的编码,因为它不能模拟
人类的眼睛、鼻子、嘴和手 指来接收信息。尽管这些年来计算机
的发展趋势使我们的桌上电脑具有捕获、存储、处理和 提供人类
交流中所使用的各种信息的能,而且不论这些信息是视觉的(文字
和图片)、听觉的
(语言、声音及音乐)还是两者的混合(动画和电影)。所有这些
信息都要求使用它们自己的 编码方式,正如交谈需要使用人的某
些器官(嘴和耳朵),而书写和阅读则需要使用另外一些第1章 电 筒 密 谈 3
器官(手和眼睛)一样。 用手电筒发送摩尔斯电码时,电筒的开
关快速地合开代表一个点,让电筒照亮稍长的时
间则代表一个划。举例来说,发送字母 A,要先快速地合开开关,然后再稍慢些合开。在发送 下一个字母前要有短暂的停顿。约定
划的时间大约是点的 3倍。例如,如果点的照亮时间为 1 秒,那么
划就是 3秒。(实际上,摩尔斯电码的传递速度要快得多。)接收
者看到了短闪和长闪 就知道是 A。
摩尔斯电码中点划之间的间隔是极为关键的。例如,发送字母 A
时,点划之间的间隔应与 一个点的时间大致相同(如果点的时间
是 1秒,那么间隔的时间也是 1秒)。同一个词中字母间 间隔稍
长,约为划的持续时间(或者 3秒,如果那是划的持续时间的
话)。下面是单词“ hello” 对应的摩尔斯电码,图中示意了字母间
的间隔(隙):
单词之间相隔大约 2倍于划的时间(如果划是 3秒,那么间隔即
为 6秒)。下面是“ hi there” 对应的编码(码字):
手电筒开和关的时间长度并没有限定,这取决于点的时间长度,点长又由手电筒开关触 发的速度和摩尔斯电码发送者记忆电码的
熟练程度来决定,熟练发送者的划也许与生手的点 等长。这个小
问题会使接收电码有些困难,但在一两个字母之后,接收者通常就
可以辨认出 哪个是点,哪个是划了。
粗看起来,摩尔斯电码的定义 — 这里所谓的定义是指与字母表
中的字母相对应的各种 点划序列 — 与打字机字母的排列一样是随
意的。但仔细观察后你会发现不完全如此,简短 的码字分配给了
使用频率较高的字母,例如 E和T,爱赌博的人和“财富之轮”爱好
者可能一 下就注意到了这个问题;不常用的字母如 Q和Z(它们在
赌局中是 10点)则分配以较长的码 字。
几乎所有人都知道一点儿摩尔斯电码,国际遇险信号 SOS的摩尔
斯电码为“三点三划三 点”。SOS并非缩写,选择它仅仅因为它有一
个易记的摩尔斯电码序列。第二次世界大战中, 英国广播公司选用贝多芬第五交响曲中的片段作为节目前奏 — B A H 、 B A H 、B A H 、 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张表大小的规律了吗?每张表都恰好是其前一张表的
两倍大小。这其中包含的 意义是:前一张表的码字后加一个“滴”或
加一个“嗒“,即构成了后一张表。
可以按下面的方式总结这个有趣的规律:
点划数 码字数
1 2
2 4
3. 8
4 16
四张表中每张码字数都是前一张的两倍,那么如果第一张表含 2个
码字,第二张表则含2×2
个码字,第三张表 2×2×2个码字。以下是另一种表达方式: 点划数 码字数
1 2
2 2×2
3 2×2×2
4 2×2×2×2
当然,如果遇到数的自乘,可以用幂表示,例如 2×2×2×2可以写
成 24。数字 2、4、8、 16分别是 2的1、2、3、4次幂,因为可以用
依次乘 2的方法将它们计算出来。由此我们的总结 还可以写成下面
的方式: 点划数 码字数
1 212 22
3 23
4 24第 2章 编码与组合 7
这张表简单明了,码字数是 2的次方,次方数目与码字中含有
的“滴”“嗒”数目相同。 我们可以把表总结为一个简单的公式:
码字数 = 2“滴”与“嗒”的数目 很多编码中都用到 2的幂,在下一章中我们会看到另一个例子。 为了使译码的过程更为简
便,可以画出如下一张树形图:
这张表表示出了由“滴”与“嗒”的连续序列得出的字母。译码时,按箭头所指从左到 右进行。例如,你想知道电码“滴-嗒-滴”代表的
字母,那么从最左边开始选择点,沿箭头 向右选择划,接着又是
点,得出对应的字母是 R,它写在最后一个点的旁边。
如果认真考虑,会发现事先建立这样一张表是定义摩尔斯电码所
必需的。首先,它保证 了你不会犯给不同的字母相同码字的错
误!其次,它保证你使用了全部的可用码字,而没有
使“滴”与“嗒”的序列毫无必要的冗长。
我们可以加长码字至 5位或更长, 5位长的码字又提供了额外的
32(2×2×2×2×2或25)
个码字。一般而言,这就足够 10个数字和 16个标点符号使用。实
际上,摩尔斯电码中的数字 确实是5位的,但在许多其他编码方式
中, 5位码字常用于重音字母而不是标点符号。
为了包含所有的标点符号,系统必须扩充至 6位表示,提供 64个
附加编码,此时系统可表 示2+4+8+16+32+64共126个字符。这对摩
尔斯电码而言太多了,以至于留下许多“未定义” 的码字。此处“未定义”指不代表任何意义的码字,如果在你接收的摩尔斯电码中有
未定义 的码字,就可以肯定发送方出了差错。
由于推出了下面这条公式:
码字数 = 2“滴”与“嗒”的数目 我们就可以继续导出更
长的码字位数所代表的码字数目。很幸运,我们不必为确定码字数
目 而写出所有可能的码字,我们所要做的不过是不断地乘 2而已:点划数 码字数
1 21 = 2
2 22 = 4
3 23 = 8
4 24 = 16
5 25 = 32
6 26 = 64
7 27 = 128
8 28 = 256
9 29 = 512
10 210 = 1024
摩尔斯电码被称为 二元码 (binary code ),因为编码中仅
含“滴”和“嗒”。这与一个硬 币很相似,硬币着地时只可能是正面或
反面。二元事物(例如硬币)、二元编码(例如摩尔斯 电码)常
常用 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(26)。
因此,布莱叶编码系统可以代表 64个不同的码字。以下就是所有
的 64个码字:
如果我们发现布莱叶编码只用了 64个码字中的一部分,我们会疑
问为什么 64个码字中有
一些不被使用;如果发现布莱叶编码使用了多于 64个的码字,则又会让人怀疑我们是否神志 清醒或数字计算的真实性, 2乘2是等于4吗?
分析布莱叶编码,还是从基本的小写字母开始:第3章 布莱叶盲文与二元编码 11
举例来说,短语“ 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
O)。显然水既不同于氢气,也不同于氧气。同样,食 盐分子由一
个钠原子和一个氯原子构成,而钠和氯都不可能成为法国馅饼的调
味品。 2
氢、氧、钠、氯都属于元素,水和食盐都属于化合物。但是盐水
是一种混合物,而不是 化合物,因为其中水和食盐都保持它们各
自的性质不变。
一个原子的电子数通常等于其质子数。但在某种特定环境下,电
子能从原子中电离出来, 这样电就产生了。
单词electron和electricity都源于古希腊词
hlek ron(elektron),你可能猜它的意思就是“极 其微小而不
可见的东西”。但事实并非如此—hlek ron的真正意思
是“琥珀”,一种玻璃状 的硬质树液。这个看似不相关的词源来自于
古希腊人所做的实验,他们用琥珀与木头相摩擦 而产生我们今天
所说的静电。在琥珀上摩擦木头使木头从琥珀获得电子,结果木头
所含的电 子数多于质子数而琥珀所含的电子数小于质子数。在更
多的现代实验中,地毯能从鞋底获得 电子。
质子和电子具有带电荷的特性,质子带正电荷( +)、电子带负
电荷(-)。中子是中性的, 不带电。即便我们用加减号来标明质子和电子,但符号并不表示算术运算中的加号和减号的 意思,也不表示质子拥有某些电子所不具备的东西。使用这些符号仅仅表
示质子和电子在某 个方面性质相反。这个相反的特性也正表明了
质子和电子是如何相互关联的。
当质子数与电子数相等时,它们是最适合和最稳定的。质子数与
电子数的不平衡会导致 它们趋于平衡。静电火花就是电子运动的
结果,是电子从地毯通过你的身体再流回到鞋子的 过程引起的。
描述质子和电子关系的另一条途径是注意观察异电性相吸同电性
相斥的现象,但光凭看 原子结构图我们是不能猜想到的。表面上
看原子核中挤在一起的质子是互相吸引的。质子是 通过比同性斥
力大的某种力聚合在一起的,这种力叫强内力。释放核能的原子核
裂变就是由 于强内力导致的。本章只讨论通过得失电子获得电
(电能)的问题。
静电不只存在于手指触摸门把手时闪出的火花之中。暴风雨时,云
层的下层积累电子而云层的顶层失去电子,闪电的瞬间,电子的不平衡马上消失。闪电
正是大量的电子迅速从一 端转移到另一端的结果。
手电筒电路中的电能显然比电火花或闪电之中的电能要好利用得
多。灯泡能稳定持续地 亮是因为电子并不是从一点跳到另一点。
当电路中的一个原子把一个电子传给邻接的另一个 原子时,它又
从另一个邻接的原子获得电子,而这个原子又从它的一个邻接原子
获得电子, 如此依次循环。可见电路中的电就是从原子到原子的
电子通路。
这不可能自发形成。仅仅只把一些破旧的电路材料连接在一起是
不可能有电能产生的, 需要某种可以激发电子环绕电路移动的物
质。再分析一下前面所画的简单手电筒电路图,可 以肯定激发电
子运动的既不是电线,也不是灯泡,那么最有可能的就是电池了。
几乎每一个人都多少了解手电筒里所用电池的类型方面的一些知
识:
· 它们都呈管状,且大小不同。比如有 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安的保险丝”。 当6
240 000 000 000 000 000个电子在 1秒内流过一个特定的点时,就是
1安培电流。
用水和水管作个类比。电流与流经水管的水量很相似,而电压类似
于水压,电阻类似于
水管的粗细程度—水管越小、阻力越大。因此水压越高,流过水管
的水量越大;水管越小, 流过它的水量就越少。流过水管的水量
(电流)与水压(电压)成正比而与水管的阻力(电 阻)成反
比。在电学中,如果知道电压和电阻的大小,就可计算出电流的大
小。电阻—物质阻碍电流 通过的能力 —用欧姆度量,得名于
Georg Simon Ohm (1789—1854),他提出了著名的欧姆定 律,定律
中表述这里I表示电流, E表示电压, R表示电阻。 举个例子,让我们看
一节空置的电池:I=ER它的电压 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毫安。这就意味着每秒钟有 4 680 000 000 000
000 000 个电子通过灯泡。(注意,如果你用欧姆表直接测量手电
筒灯泡的电阻,你只会得到 一个比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。
然而,数字不那么容易随文化的不同而改变。不论那种语言,也
不管怎样读那些数字, 地球上我们能够遇到的几乎所有的人都用
同样的方式来写数字:
数学,从某种意义上来说是不是可以称得上是一种世界语言呢?
毫无疑问,数字是我们平时能够接触到的最抽象的代码。当你看到
数字“ 3”时并不需要
立即将它和任何事情相联系。你可能将它设想为 3个苹果或者 3个
其他什么东西,但是当你从 上下文中得知这个数字是指某个小孩
的生日、电视频道、曲棍球比赛的得分或者是制作蛋糕 的食谱中
提供的需要面粉的杯数时,也能够像认为它代表 3个苹果时一样自
然。因为数字一开 始产生时就很抽象,所以让我们理解这些苹
果:并不一定要用符号“3”来表示就更困难了。本章的很大一部分以及
下一章将来讲解这些苹果:
也可以用“ 11”的形式来表示。
先不讨论数字 10与生俱来的特殊性。大多数人使用的数字系统
是基于 10(有时候是 5)的, 这种情况并不奇怪。最初人们是用
手指来数数的。要是人类进化成有 8个或12个手指,人类计 数的方
式就会有所不同。英语 Digit(数字)这个单词也可以指手指或脚
趾,单词 five(五)和 单词fist(拳头)有相同的词根,这种情况
并不是巧合。
这样看来,人类选择使用以 10为基础的记数方法(或称为十进
制记数法)完全是任意的, 但我们赋予 10的整数次幂重大的意
义,并给它们命名:十个一年是一个十年;十个十年是一 个世
纪;十个世纪是一个千年;千个一千是百万;千个百万是十亿。下
面是 10的各次幂:
101 = 10
102 = 100
103 = 1000(千)
104 = 10 000
105 = 100 000106 = 1 000 000(百万)
107 = 10 000 000
108 = 100 000 000
109 = 1 000 000 000(十亿)多数历史学家认为数字最初创造出来是用来数东西的,比如:人
数、财产数、商品交易 量等。举个例子来说,假定某个人有 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-Musa al-Khwarizmi(由它的名字得到单词
algorithm(算法))在大约公元 825年写了一本代数书, 书中用的
就是印度的数字系统(阿拉伯数字)来计数。产生于公元 1120年
的拉丁文译本对整 个欧洲用现在的阿拉伯数字代替当时使用的罗
马数字的过渡过程产生了很大的影响。
印度—阿拉伯数字系统与先前的数字系统相比在以下三个方面不
同:
· 印度-阿拉伯数字系统是和位置相关的,也就是说,一个数字依据
位置的不同代表不同 的数量。数字的位置和数字的大小一样,都
是很重要的。(但实际上,数字的位置更重 要。)100和1 000 000
中都只有一个 1,但我们知道一百万比一百要大得多。
· 几乎所有早期的数字系统都有一个阿拉伯数字所没有的东西,那
就是用来表示数字 10的 一个专门的符号。现在使用的数字系统中
是没有代表 10的专门符号的。
· 另一方面,几乎所有早期的数字系统都缺少一个阿拉伯数字中有
的,而且事实证明是比 代表数字 10的符号重要得多的符号,那就
是零。 是的,就是零。这个小小的零毫无疑问是数字和数学历史
上最重要的发明之一。它支持
位置表示法,因为它可以将 205与250区别开来。数字零也使得
与位置无关的数字系统中非常 复杂的运算变得简单,尤其是乘除
法。
印度—阿拉伯数字的整体结构是以读它们的方式展现的。拿
4825作为例子,我们把它读 作“四千八百二拾五”,意思是:或者,可以将它的组成写成这样:四个一千 八个一百 两个十 一个五4825=4000+800+20+5
或者,可以将它进一步分解,写成这样:
4825=4×1000+
8×100+
2×10+
5×1
另外,也可以使用 10的整数次幂的形式,重新写成:
4825=4×103+
8×102+
2×101+
5×100
记住,任何数的 0次幂都等于 1。
多位数中的每位都有特定的意义,如下图所示。这 7个方格可以
表示从 0~9 999 9999的任 何一个数字:1的个数
10的个数
100的个数
1000的个数
10 000的个数
100 000的个数
1 000 000的个数
每一个位置(位)与 10的一个整数次幂相对应。不需要一个专
门的符号来表示数字 10, 因为可以将 1放在不同的位置,用 0作为
占位符。
分(小)数可以同样的形式作为数字放在十进制数的小数点的右
边,这一点非常好。数字 42 705.684是:
4×10 000+
2×1000+
7×100+
0×10+
5×1+
6÷10+
8÷100+
4÷1000
该数也可以写成不带除法的形式,如下:
4×10 000+
2×1000+
7×100+
0×10+
5×1+
6×0.1+
8×0.01+
4× 0.001或写成10的整数次幂的形式:4×104+
2×103+
7×102+
0×101+
5×100+
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为基础组织起来的,就不需要这样的一个符
号:
把这个符号拿给任何一个卡通人物看,都会有同样的反应:“那
是什么?它是干什么用 的?”如果再仔细想一会儿的话,你会发现
连这样的一个字符也不需要:
在十进制数字系统中,没有专门用来表示 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的数字以外,它基本上和数十进制的数
是一样的。当然,相同的数字代表的数量是不同的:0、1、2、3、4、5、6、7、10、11、12、13、14、15、16、17、20、21、22、23、24、25、26、27、30、31、32、33、34、35、36、37、40、41、42、43、44、45、46、47、50、51、52、53、54、55、56、57、60、61、62、63、64、65、66、67、70、71、72、73、74、75、76、77、100...
最后一个数字读作“么零零”,是卡通人物拥有的手指数自乘的结果
(即平方)。 在写十进制或八进制数时,为避免混淆,可以借助
使用特定的标记以区别表示数字系统。
下面用标记“ TEN”表示十进制数,标记“ EIGHT”表示八进制数。这样,白雪公主遇到的小矮人的数目是 77
TEN
或EIGHT卡通人手的手指数是 810
TEN
或EIGHT贝多芬写的交响乐的首数是 911
TEN
或EIGHT人的手指的数目是 10
一年中的月份数是 1212
TEN
或
14
或 TENEIGHT EIGHT两个星期所包含的天数是 14
“情人”的生日庆祝会是 1616
TEN
或
或20EIGHTTEN
一天中所包含的小时数是 24EIGHT
或30拉丁字母表中的字符数是 26TEN
32
或 TEHEIGHT
EIGHT与一夸脱液体相当的盎司数为 3240
TEN
或EIGHT一副牌中含有的牌数是 5264
TEN
或EIGHT国际象棋棋盘的方格数是 64100
TEN
或EIGHTSunset Strip 最著名的 17牌号是77TENor 115EIGHT美式足球场的面积是 100144
TEN
或EIGHT参加温布尔登网球公开赛女单初赛的人数是 128200
TEN
或EIGHT古埃及孟斐斯城市面积的平方英里数是 256TENor 400EIGHT注意,在上面一系列的八进制数中,有一些好整数,像 100EIGHT、200EIGHT、 400EIGHT。好整数通常是指结尾有一些零的数。在结尾处有两个零的十进制数意味
着它是 100TEN即10TEN
乘以10
TEN;在八进制数中,结尾处有两个零表示它是 100EIGHT即10EIGHT乘以 10EIGHT(或 8TEN乘以 8TEN
,等于 64TEN)。你可能已经注意到了,好的八进制整数 100200
EIGHT
、400
EIGHT
和EIGHT与十进制数64128
TEN
、TEN
、256相等,它们都是 2的整数次幂。例如, 4004
EIGHT
等于EIGHT乘以1010
EIGHT
乘以EIGHT,所有这些数都是 2的整数次幂。任何时候,将 2的整数次幂和另一个 2的整
数次幂相乘,得到的仍是 2的 TEN
整数次幂。
下表给出了一些 2的整数次幂的十进制及其对应的八进制的表示形
式:
2的整数次幂 十进制数 八进制数
20 1
21 2
22 4
23 8
24 16
25 32
26 64(续)
27 128
28 256
29 512
21
0
1024
211 2048
21
2
4096
最右边一列的好整数给我们一个暗示:十进制以外的数字系统可能
对使用二元码有所帮
助。
八进制数字系统和十进制数字系统在结构上没有什么差别,只是
在细节上有一些差异。 例如,八进制数的每一个位置代表的值是
该位数字乘以 8的整数次幂的结果:
1的个数
8的个数
64的个数
512的个数 4096的个数
32768的个数这样,八进制数 3725
EIGHT可以拆分成这样:3725EIGHT= 3000EIGHT+ 700EIGHT+ 20EIGHTEIGHT
+ 5还可以写成另外几种不同的形式。下面就是其中的一种,采用十进
制形式的 8的整数次幂:3725EIGHT= 3×512TEN
+7×64TEN
+采用八进制形式的 8的整数次幂的情况:2×8
5×1TEN
+3725EIGHT= 3 ×1000
7×100EIGHT
+
+还有另外的一种拆分形式:2×10
5×1EIGHT
EIGHT
+3725EIGHT= 3×83+
7×82+
2×81+
5×80如果算出其十进制的结果,会得到 2005。这就是将八进制数转换成十进制数的方法。可以采用与做十进制加法和乘法相同的办法来做八进制数的加法
和乘法。唯一真正的区别 在于要采用不同的表格来对各个数字进
行乘法或加法运算。下面是八进制数的加法表: TEN例如, 5EIGHTEIGHT
+ 7= 14EIGHT。可以采用与做十进制加法相同的方法将两个稍长一点儿的八进制数相加:
135
+ 643
1000
先从最右边的一列做起, 5加上3等于 10,该位写下 0,向前进
1;1加3加4等于10,该位写 下0,向前进 1;1加1加6等于10。
同样,在八进制中, 2乘以2仍然等于 4。但是 3乘以3却不等于 9,那是多少呢? 3乘以 3等于11EIGHT
,此数与 9TEN所代表的数量相等。下图是完整的八进制数的乘法表:这里,4×6等于30,也即表明 30EIGHT和4×6的十进制结果 24是等值的。八进制数字系统与十进制数字系统一样,都是有效的,但八进制数
字系统在理解上更深 EIGHT
TEN
了一层。既然我们已为卡通人物开发出了一套数字系统,就再给龙
虾开发一套适合它们用的 数字系统吧。龙虾根本没有手指,但它
两只前爪的末端都有螯。适合于龙虾的数字系统是四进制数字系统或称为基于 4的数字系统:四进制数可以这样来数:
0、1、2、3、10、11、12、13、20、21、22、23、30、31、32、33、100、101、102、103、110,等等。 这里不打算在四进制数上花太多的时间,因为
还有更重要的事情要做。但我们还是要看
一下四进制中的每一位是怎样和 4的某个整数次幂相对应的:
1的个数
4的个数
16的个数
64的个数
256的个数
1024的个数四进制数 31232可以写成:31232FOUR= 3 ×256
1×64TEN
+
+TEN
2×16 +
TEN也可以写成:3×4
2×1TEN TEN
+31232FOUR= 3 ×10000+
FOUR1×1000FOUR
+2×100FOUR
+3×10
2×1FOUR
+还可以写成:31232FOURFOUR
=3×44+
1×43+
2×42+
3×41+
2×40如果以十进制数的形式计算其结果,就会发现 31232FOUR等于878TEN。现在,我们要做一个跳跃并且是最远的一跳。假定我们是海豚,并
且必须用两鳍来数数。
则这个数字系统就是基于 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、??
这些数看起来好像很大,实际上并不是这样。更准确地说二进制
数长度增长的速度要快 过二进制数增大的速度:每个人的头的个数为 1TEN
或1TWO海豚身上的鳍的个数为 2TEN
或10TWO一个大汤匙中包括的小茶匙的数目为 3TEN
或11TWO正方形的边数为 4或100TWO每个人一只手的手指数为 5
TEN或101TWO一种昆虫的腿数为 6
TEN
一星期的天数为 7或110
或111
TENTWOTENTWO八重奏中音乐家的个数为 8TEN或 1000TWO太阳系中的行星(包括冥王星在内)总数为 9
TEN或1001TWO牛仔帽重量以加仑计算为 10
TEN
等等。或1010TWO在多位二进制数中,数字的位置和 2的整数次幂的对应关系为:
1的个数
2的个数
4的个数
8的个数
16的个数
32的个数
因此,任何时候由一个 1后跟几个零构成的二进制数一定是 2的整
数次幂。 2的幂与二进制数中零的个数相等。下面是扩充的 2的各次幂的表,可用来说明这
条规则:
2的幂
20
十进制数
1
八进制数
1
四进制数
1
二进制数
1
21 2 2 2 10
22 4 4 10 100
23 8 10 20 1000
24 16 20 100 10000
25 32 40 200 100000
26 64 100 1000 1000000
27 128 200 2000 10000000
28 256 400 10000 100000000
29 512 1000 20000 1000000000
21 0 1024 2000 100000 10000000000
211 2048 4000 200000 100000000000
21 2 4096 10000 1000000 1000000000000
假定有一个二进制数 101101011010,它可以写成:101101011010TWO= 1×2048TEN
+0×1024
1×512TEN
+
+1×256TEN
+TEN
0×128 +
TEN1×64TEN
+0×32
1×16TEN
+
+1×8TEN
TEN
+0×4
1×2TEN
+
+TEN
0×1也可以这样写:101101011010TWOTEN
= 1×211+
0×210+
1×29+
1×28+
0×27+
1×26+
0×25+
1×24+
1×23+
0×22+
1×21+
0×20如果将各个部分以十进制数的形式相加,得到
2048+512+256+64+16+8+2=2906TEN。将二进制数转换成十进制数非常简单,你可能更喜欢借助已准备好
的模板进行转换:×128×64 ×32×16 ×8×4 ×2 ×1这个模板允许你转换最大长度为 8的二进制数,但它扩充起来非
常容易。使用时,将 8个 二进制数字放到上部的 8个小盒子中,一
个盒子放一个数字。做 8个乘法运算,将结果分别放
到底部的 8个小盒子中。将 8个盒子中的数字相加就得到最终结
果。下面是将 10010110转化成 十进制数的例子:×128×64×32 ×16 ×8 ×4 ×2 ×1将十进制数转换成二进制数就没那么直接了。但这里也有一个帮
助你将 0~225范围内的 十进制数转换成二进制数的模板:
实际转化过程要表面上看的麻烦得多,所以一定要仔细按照下面
的指导来做。将整个十 进制数(应小于等于 225)放在左上角的方
格中。用除数( 128)去除那个数(被除数),如下 图所示。将商
写在正下方的盒子中(即左下角的盒子中),余数写在右边的盒子
中(即上面一 行左数第二个盒子中)。用第一个余数再除以下一
个算子 64。依照模板的顺序用同样的方法继 续做下去。
记住,每次求得的商只能是 0或者1。如果被除数小于除数,商
为 0,余数和被除数相等; 如果被除数大于除数,商为 1,余数为
被除数与除数之差。下面是将 150转换成二进制数的过 程:如果要做两个二进制数的加法或乘法,也许直接采用二进制来做
比转化成十进制再做还 要简单。这将是你真正喜欢二进制数的地
方。如果只需记住下面的二进制加法表就可以做加 法运算,也就
不难想象掌握加法运算该有多快: + 0
0 0
1 1
用二进制加法表将两个二进制数相加:1 1 0 0 1 0 1
+ 0 1 1 0 1 1 0
1 0 0 1 1 0 1 1
从最右边的一列开始做起: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下面是13TEN
与11以二进制数的形式做乘法的过程:1 1 0 1
TEN
× 1 0 1 1
1 1 0 1
1 1 0 1
0 0 0 0
1 1 0 1
1 0 0 0 1 1 1 1最后结果是 143TEN。人们在使用二进制数的时候通常将它们写成带有前导零的形式(即
第一个 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 10
1011 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 22
10111 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的个 数,但如果
看到的是 12 000 000,则马上就能知道是一亿两千万。
二 进 制 数 的 位 长 度 增 加 得 特 别 快 。 例 如 , 一 亿 两 千
万 的 二 进 制 表 示 为 : 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是怎样通知美国人英国殖民者入侵的消息时
不一定与史实完全一致,但 他的确提供了一个利用比特传递信息
的令人茅塞顿开的例子:
(他告诉他的朋友:“如果英军今晚入侵, 你就在北教堂的
钟楼拱门上悬挂点亮的提灯 作为信号。一盏提灯代表英
军由陆路入侵, 两盏提灯代表英军由海路入侵。?? )
也就是说, Paul Revere 的朋友有两盏灯。如果英军由陆路入
侵,他就挂一盏灯在教堂的 钟楼上;如果英军由海路入侵,他就
挂两盏灯在教堂的钟楼上。
然而,朗费罗并没有将所有的可能都涉及到。他留下第三种情况
没有说,那就是英军根 本就没有入侵的情况。朗费罗已经暗示第
三种可能的信息可以由不挂提灯的方式来传递。让我们假设那两盏灯是永久固定在教堂钟楼上的。在正常情况下,它们都不亮:
这就是指英军还没有入侵。如果一盏提灯亮:或
表示英军正由陆路入侵。如果两盏提灯都亮:表示英军正由海路入侵。
每一盏提灯都代表一个比特。亮着的灯表示比持值为 1,未亮的
灯表示比特值为 0。前面 奥兰多已经说明了传送只有两种可能性的
信息只需要一个比特。如果 Paul Revere 只需被告知 英军正在入侵
(不管是从何处入侵)的消息,一盏提灯就足够了。点亮提灯代表
英军入侵, 未点亮提灯代表又是一个和平之夜。
传递三种可能性的消息还需要再有一盏提灯。一旦再有一盏提
灯,两个比特就可以通知 有四种可能的信息:
00=英军今晚不会入侵
01=英军正由陆路入侵
10=英军正由陆路入侵
11=英军正由海路入侵
Paul Revere 将三种可能性用两盏提灯来传送的做法事实上是相当
富有经验的。用通信理 论的术语说,他采用了冗余的办法来降低
噪声的影响。通信理论中的噪声是指影响通信效果 的任何事物。
电话线路中的静电流显然是影响电话通信的一种噪声。然而,即使
是在有噪声 的情况下,电话通信仍能够成功,因为口语中存在大
量的冗余。你同样可以听懂对方的话而 无需将每个音节、每个字
都听得很清楚。
在上述例子中,噪声是指晚上光线黯淡以及 Paul Revere 距钟楼
有一定的距离,它们都阻 碍了Paul Revere声将钟楼上的两盏灯区分
清楚。下面是朗费罗的诗中很重要的一段:
(哦!他站在与钟楼等高的位置观察, 一丝微光,然后,有一盏灯亮了! 他跳上马鞍,调转马头, 徘
徊,凝视,直到看清所有的灯 另一盏灯也亮了!)
那当然不是说 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的Movie Video 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=MAJOR BOMB
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位数字。
如果所有的区号都使用的话(实际上有一部分区号并没有使用,将它们
忽略),一共有 103或
1000个代码,从 000~999。区号为 212的7位数的电话号码有多少
种可能呢? 107或10 000 000
个;区号为 212并且以260开头的电话号码有多少个呢? 104或10
000个。 同样,在二进制数中,可能的代码数等于 2的比特位数次幂: 比特位数 代码数
1 21 = 2
2 22 = 4
3 23 = 8
4 24 = 16
5 25 = 32
6 26 = 64
7 27 = 128
8 28 = 256
9 29 = 512
10 21 0 = 1024
每增加一个比特位,二进制代码数翻一番。 如果知道需要多少个
代码,那么怎样才能知道需要多少个比特位呢?换句话说,在上述
表中,如何才能由代码数反推出比特位数呢?
用到的方法叫作取以 2为底的对数,对数运算是幂运算的逆运算。
我们知道 2的7次幂等于128,以2为底的128的对数就等于 7。用数学记号来表示第一个句
子为:
27 = 128它与下述句子等价:log 128 = 7
2因此,如果以 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
50 64
100 125
200 250
400 500
800 1000
1600 20003200 4000
为ASA等级编码需要多少个比特呢?答案是 5个比特。我们知
道, 24=16,与24比太小了; 25 = 32 ,又超过了所需的编码数。比特值与胶片速度的对应关系如下所示:
方格
2
0
方格
3
0
方格
4
0
方格
5
1
方格
6
0
胶片速
度
25
0 0 0 0 1 32
0 0 0 1 1 40
1 0 0 1 0 50
1 0 0 0 1 64
1 0 0 1 1 80
0 1 0 1 0 100
0 1 0 0 1 125
0 1 0 1 1 160
1 1 0 1 0 200
1 1 0 0 1 250
1 1 0 1 1 320
0 0 1 1 0 400
0 0 1 0 1 500
0 0 1 1 1 640
1 0 1 1 0 800
1 0 1 0 1 1000
1 0 1 1 1 1250
0 1 1 1 0 1600
0 1 1 0 1 2000
0 1 1 1 1 2500
1 1 1 1 0 3200
1 1 1 0 1 4000
1 1 1 1 1 5000
多数现代的 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(universalproduct code,通用产品 代码),即日常所购买的几乎所有商品包
装上的条形码。条形码已经成为计算机在日常生活中 应用的一种
标志。
尽管UPC常常使人多疑,但它确实是一个无辜的小东西,发明出
来仅仅是为了实现零售 业的结算和存货管理的自动化,且其应用
是相当成功的。当它和一个设计精良的结算系统共 同使用时,顾
客可以拿到列出细目的售货凭条,这一点是传统现金出纳员所无法
做到的。
有趣的是, UPC也是二进制代码,尽管它初看起来并不像。将
UPC解码并看看 UPC码具体是怎样工作的是很有益的。
通常情况下, UPC是30条不同宽度的垂直黑色条纹的集合,由不同
宽度的间隙分割开, 3
其下标有一些数字。例如,以下是 Campbell公司10 盎司的罐装
鸡汁面包装上的 UPC: 4
可将条形码形象地看成是细条和黑条,窄间隙和宽间隙的排列形
式,事实上,这是观察条 形码的一种方式。黑色条有四种不同的
宽度,较宽的条的宽度是最细条的宽度的两倍、三倍 或者四倍。
同样,各条之间的间隙中较宽的间隙是最窄间隙的两倍、三倍或者
四倍。
但是,看待 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=61101100=2 1000100=7
1000010=3 1001000=8
1011100=4 1110100=9
这些代码都是前述代码的补码或补数:凡是 1的地方都换成 0,凡是 0的地方都换成 1。这 些代码都是以 1开始,以零结束,并且
每组都有偶数个 1,称之为偶校验。
现在,可以对 UCP进行解码了。借助前两个表格, Campbell公司
10 3 盎司的罐装鸡汁面 4的包装上用 UPC编码的12个数字是:0 51000 01251 7这个结果是令人失望的,正如你所看到的那样,它们和印在 UPC底
部的数字完全相同。(这样做是有意义的,因为由于某种原因,扫描仪可能无法识别条
形码,收银员就可以手工将 这些数字输进去。)我们还没有完成
解码的全部任务,而且,我们也无法从中解码任何秘密信 息。然
而,关于 UPC的解码工作已经没有了,那 30个竖条已经变成了 12
个数字。
第一个数字(在这里是 0)被称为数字系统字符, 0的意思是说
这是一个规范的 UPC编码。 如果是具有不同重量的货物的
UPC(像肉类或其他商品),这个数字是 2;订单、票券的 UPC
编码的第一个数字通常是 5。
紧接着的 5个数字是制造商代码。在上例中, 51000是 Campbell 鸡
汁面公司的代码。
Campbell公司生产的所有产品都使用这个代码。再后面的 5个数字
( 01251)是该公司的某种 3
产品的编号,上例中是指 10 4 盎司的罐装鸡汁面。别的公司的鸡汁
面可能有不同的编号,且
01251在另外一个公司可能是指一种完全不同的产品。
和通常的想法相反, UPC中没有包含该种产品的价格。产品的价
格信息可以从商店中使 用的与该扫描仪相联的计算机中检索互
到。
最后的数字(这里是 7)称作模校验字符,这个字符可用来进行
另外一种错误检验。为了 解释校验字符是怎样工作的,将前 11个
数字(是 0 51000 01251)各用一个字母来代替:
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”中的四个布莱
叶字母符号就可以简单地写成:100100 101010 100110 100010
最左边的一位对应编号为 1的位置,最右边的一位对应编码为 6的
位置。 正如前面所讲到的,比特可以代表单词、图片、声音、音
乐、电影,也可以代表产品编
码、胶片速度、电影的受欢迎程度、英军的入侵以及某人所挚爱的
人的意愿。但是,最基本 的一点是:比特是数字。当用比特表示
信息时只要将可能情况的数目数清楚就可以了,这样 就决定了需
要多少个比特位,从而使得各种可能的情况都能分配到一个编号。
比特在哲学和数学的奇怪混合物—逻辑—中发挥作用。逻辑最基
本的目标是证明某个 语句是否正确,正确与否也可以用 1和0来表
示。第10章 逻辑与开关
真理是什么呢?亚里士多德认为逻辑与它有关。他的讲义合集
《工具论》(Organon,可 追溯到公元前 4世纪)是最早的关于逻
辑的详细著作。对于古希腊人而言,逻辑是追寻真理的 过程中用
于分析语言的一种手段,因此它被认为是一种哲学。亚里士多德的
逻辑学的基础是 三段论。最有名的三段论(它并非是在亚里士多
德的著作中发现的)是:
(所有的人都是要死的 ; 苏格拉底是人 ; 所以,苏格
拉底是要死的。 )
在三段论中,两个前提被假设是正确的,并由此推出结论。 苏格
拉底之死这个例子看上去似乎太直白了,但还有许多其他不同的三
段论。例如,考
虑下面两个由 19世纪数学家 Charles Dodgson(也就是 Lewis
Carroll)提出的前提:(所有的哲学家都是有逻辑头脑的 ;
一个没有逻辑头脑的人总是顽固的。 )
它所能推出的结论一点儿也不明显。(事实上,结论是“一些顽
固的人不是哲学家 (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。 这样,刚
才的表达式可以写成下面的形式:
(M AND N AND (W OR T))OR(F AND N AND (NOT W))OR B
这与你的口头描述已经十分接近了。注意圆括号是如何清楚地表
达出你的意图的。你想 要的猫来自下面三个集合之一:
(M AND N AND(W OR T ))
或
(F AND N AND (NOT W ))
或
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
0 0
1 0
当用+表示OR时,可能的结果是:0+0 = 0
0+1 = 1
1+0 = 1
1+1 = 1
当+的左、右操作数中有一个为 1时,结果就是 1。除了 1+1=1这
种情况,这种计算和普通 加法产生的结果是一致的。可用另一张
小表来总结: OR 0
0 0
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
0 0
1 0
这个简单的电路实际上执行了布尔代数的“ 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
0 0
1 1
这意味着两个并联的开关执行的是和布尔一样的操作。 当你再进
入宠物店时,你告诉店员:“我想要一只阄过的公猫,白的或黄褐
色的均可;或
者要一只没生育能力的母猫,除了白色,其他任何颜色均可;或者
只要是只黑猫,我也要。” 店员便得到了如下的表达式:(M×N×(W+T))+(F×N×(1-W))+B
现在你知道两个串联开关执行的是逻辑与( AND,由符号×来表
示),两个并联开关执行 的是逻辑或( OR,由符号 +来表示),你可以按如下方法连接 8个开关:
这个电路中的每一个开关都被标上了一个字母 (与布尔表达式中
所用字母相同 )。 W 表示 非W,是1-W的另一种写法。事实上,如果按从左至右,从上至下的顺序来阅读这个电路图, 你遇到的
字母的顺序和它们在布尔表达式中出现的次序是一样的。表达式中
的乘号(×)都对应 角是电路图中串联的两个或两组开关的位置;表
达式中的加号 (+)号对应的是电路图中并联的 两个或两组开关的位
置。
你应该记得,店员最先挑出的是只未阄过的褐色的公猫。闭合相应
的开关:
尽管M、T和非W这三个开关都闭合了,但没有构造出一个完整 ......
您现在查看是摘要介绍页, 详见PDF附件(16591KB,1212页)。





