奎克的藏经阁 · MinerU 解析内容

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

438 个 PDF 物理页 · 本页显示文件第 81–90 页

PDF 物理页索引 80

文件中的第 81 页 · 印刷页码:64

一周中的天数是 $7 _ { \mathsf { T E N } }$ $1 1 1 _ { \mathsf { T w o } } ;$

八重奏中演奏者的人数是 ${ \pmb 8 } _ { \mathtt { T E N } }$ $1 0 0 0 _ { \mathrm { T W O } }$

银河系中行星(包括冥王星)的总数是 $9 _ { \mathtt { T E N } }$ 或 $1 0 0 1 _ { \mathrm { ~ T w o } }$

牛仔帽的重量以加仑计算为 $1 0 _ { \mathsf { T E N } }$ 或 $1 0 1 0 _ { \mathrm { T W O } }$ 0

在一个多位二进制数中,数字的位置和2的整数次幂的对应关系为:

因此,任何一个以1开头而后面全是0的二进制数一定都是2的整数次幂。幂指数就等于这个二进制数中0的个数。

以下是2的各整数次幂的扩展表,它可以用来说明这条规则。

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

64

PDF 物理页索引 81

文件中的第 82 页 · 印刷页码:65

$$
1 0 1 1 0 1 0 1 1 0 1 0 _ { \mathrm { T w o } } = 1 \times 2 0 4 8 _ { \mathrm { T E N } } +
$$

$$
0 \times 1 0 2 4 _ { \mathrm { { T E N } } } +
$$

$$
1 \times 5 1 2 _ { \mathrm { T E N } } +
$$

$$
1 \times 2 5 6 _ { \mathrm { T E N } } +
$$

$$
0 \times 1 2 8 _ { \tt T E N } +
$$

$$
1 \times 6 4 _ { \mathrm { T E N } } +
$$

$$
0 \times 3 2 _ { \mathrm { T E N } } +
$$

$$
1 \times 1 6 _ { \mathrm { T E N } } +
$$

$$
1 \times 8 _ { \mathsf { T E N } } +
$$

$$
0 \times 4 _ { \mathrm { T E N } } +
$$

$$
1 \times 2 _ { \tt T E N } +
$$

$$
0 \times 1 _ { \mathrm { { T E N } } }
$$

同样也可以用下面这种方式表示:

$$
{ \begin{array} { r l } { 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 0 _ { \mathrm { r e } } - 1 \times 2 ^ { 1 } + } & { } \\ & { \times \cdot 2 ^ { 1 6 } * } \\ & { 1 \times 2 ^ { 2 } + } \\ & { \times 2 ^ { 4 } + } \\ & { 0 \times 2 ^ { 4 } + } \\ & { 0 \times 2 ^ { 5 } + } \\ & { 1 \times 2 ^ { 6 } + } \\ & { 0 \times 2 ^ { 7 } + } \\ & { 1 \times 2 ^ { 7 } - } \\ & { 1 \times 2 ^ { 2 } + } \\ & { 0 \cdot 2 ^ { 1 6 } + } \\ & { 1 \times 2 ^ { 1 7 } + } \\ & { 1 \times 2 ^ { 1 6 } } \\ & { 0 \cdot 2 ^ { 9 } + } \end{array} }
$$

如果将各个部分以十进制数的形式相加,会得到 $2 0 4 8 + 5 1 2 + 2 5 6 + 6 4 + 1 6 + 8 + 2$ ,即$2 { , } 9 0 6 _ { \mathrm { { T E N } } }$

为了更简明、更便捷地将二进制数转换为十进制数,你可能会更喜欢借助我准备的

8 十的替代品

65

PDF 物理页索引 82

文件中的第 83 页 · 印刷页码:66

模板来进行转换:

×128 ×64 ×32 ×16 ×8 ×4 ×2 ×1

这个模板可以将一个数转换最大长度为8的二进制数,但是它很容易扩展。在使用模板的时候,将8位二进制数填入到上面一行的格子里,每个格子一位。做8个乘法运算,然后将结果填入到下面一行的8个小格子里。再将这8个格子中的数相加就会得到最终结果。下面就举例说明如何得到与二进制数10010110相等的十进制数。

×128 ×64 ×32 ×16 x8 x4 x2 x1

$$
[ 1 2 8 ] + [ 0 ] + [ 0 ] + [ 1 6 ] + [ 1 6 ] + [ 0 ] + [ 4 ] + [ 2 ] + [ 0 ] = [ 1 5 0 ]
$$

将十进制数转换成二进制数就没那么直接了。下面是一个能够帮你将0\~255范围内的十进制数转换为二进制数的模板。

$$
\pm 1 2 8 + 6 4 + 3 2 + 1 6 + 8 + 4 + 2 + 1 + 1
$$

$$
\square \square \square \square \square \square \square \square
$$

这个转换实际上比看上去要麻烦得多,因此一定要仔细地按照下面的指导来操作。将整个十进制数(小于或等于255)填入到上面一行最左端的格子中。用第一个除数(128)去除这个数。所得的商填入正下方的格子(左下角的格子),余数填入右边的格子(上面--行左数第二个格子)。用第一个余数再除以下一个除数64。依照模板的顺序用同样的方法继续进行下去。

要记住,每次求得的商只能是0或者1。如果被除数小于除数,商为0,余数就是被除数。如果被除数大于或等于除数,那么商为1,余数就是被除数减去除数所得之差。下面以150为例进行转换。

$$
+ 1 2 8 + 6 4 + 3 2 + 1 6 + 8 \neq 4 + 2 + 1 + 1 6
$$

$$
\boxed { ! } \boxed { \textrm { o } } \boxed { \textrm { o } } \boxed { ! } \boxed { \textrm { o } } \boxed { ! } \boxed { \textrm { u } } \boxed { \textrm { o } }
$$

如果需要对两个二进制数进行加法或乘法,直接运算可能会比转换成十进制再进行

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

66

PDF 物理页索引 83

文件中的第 84 页 · 印刷页码:67

运算要简单些。这将是你真正喜欢二进制数的地方。想象一下,如果你记住了如下表格,掌握加法将是一件多么迅速的事情啊。

让我们用这个表格来计算两个二进制数的和:

$$
\frac { 1 1 0 0 1 0 1 } { 1 0 0 1 1 0 1 1 }
$$

从最右一列开始:1加0等于 $\mathbf { l } _ { \mathrm { ~ o ~ } }$ 右边第二列:0加1等于 $1 _ { \circ }$ 第三列:1加1等于0,进 $1 _ { \circ }$ 第四列:1(进位)加0加0等于 $1 _ { \circ }$ 第五列:0加1等于 $1 _ { \circ }$ 第六列:1加1等于0,进1。第七列:1(进位)加1加0等于10。

乘法表甚至比加法表还要简单,因为该表可以由两个基本的乘法规则推导出来:任何数乘以0结果都为0,任何数乘以1,结果都是这个数本身。

以下是 $1 3 _ { \mathrm { T E N } }$ 与 $1 1 _ { \mathsf { T E N } }$ 的二进制乘法运算过程:

$$
\begin{array} { r } { 1 1 0 1 } \\ { \frac { \times 1 0 1 1 } { 1 1 0 1 } } \\ { 1 1 0 1 } \\ { 0 0 0 0 } \\ { \frac { 1 1 0 1 1 } { 1 0 0 1 1 1 1 } } \end{array}
$$

结果为 $1 4 3 _ { \mathrm { ~ T E N } }$ 0

人们在使用二进制数的时候通常将它们写成带有前导零的形式(即第一个1的左边有零)。例如0011,而不是写做11。这样写不会改变数字的大小,仅仅是为了美观。例如,以下是前16个二进制数以及与它们等价的十进制数。

8 十的替代品

67

PDF 物理页索引 84

文件中的第 85 页 · 印刷页码:68

让我们再看一下这一列二进制数。仔细考虑这4个垂直列中每一列的1和0,注意它们在一列中自上而下是以怎样的规律交替的。

最右边的一列一直在0和1之间交替。

右数第二列是在每两个0和两个1之间相互交替。

下一列是在每四个0和每四个1之间相互交替。

再下一列是在每八个0和每八个1之间相互交替。

这是很有条理的,难道不是么?事实上,只要再重复这16个数字并且在每个数字的前面加一个1就可以很容易地写出后面的16个数字。

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

68

PDF 物理页索引 85

文件中的第 86 页 · 印刷页码:69

从另外一种角度来看:当以二进制计数的时候,最右边的一位(最低位)以0和1交替。每当该位由1变为0,从右边数的第二位(次低位)也随之改变—不是由0变到1,就是由1变到 $\scriptstyle \mathbf { 0 } _ { \circ }$ 因此,每次只要有一个二进制数位的值由1变到0,紧挨着的高位数字也会发生变化,而且其变化不是由0到1就是由1到 $\scriptstyle \mathbf { 0 } _ { \circ }$

在书写一个比较大的十进制数的时候,通常在每三位数字之间用一个逗号隔开,这样会让人很清楚地读出数字的大小。例如,当你看到数字12000000时,你可能不得不去数一下其中0的个数才知道这个数是多少,但是,如果数字写做12,000,000,你一眼就会知道它是一千二百万。

二进制数的位长度增加得特别快。例如,一千二百万在二进制中应表示为:101101110001101100000000。为了让二进制数更易读,通常在每四个数字之间用一个连字符来分开,例如,1011-0111-0001-1011-0000-0000,或者每四位空出一个空格:101101110001101100000000。本书的后面,我们将看到更简单的二进制数的表示方法。

通过将数字系统减少至只有0和1两个数字的二进制数字系统,我们已经讨论得足够深入。不可能再找到比二进制数字系统更简单的数字系统了。此外,二进制数字系统还在算术与电子技术之间架起了一座桥梁。在之前的章节中,我们所看到的开关、电线、灯泡,还有继电器等物体,都可以用来表示二进制数0和1。

电线可以表示二进制数字。如果有电流流过这根电线就代表二进制数字1,如果没有,则代表二进制数字0。

8 十的替代品

69

PDF 物理页索引 86

文件中的第 87 页 · 印刷页码:70

开关可以表示二进制数字。如果开关接通(或闭合)就代表二进制数字1,如果开关关断(或断开),则代表二进制数字0。

灯泡可以表示二进制数字。如果灯泡点亮,就代表二进制数字1,如果没点亮,则代表二进制数字0。

电报继电器可以表示二进制数字。如果继电器闭合,就代表二进制数字1,如果断开,则代表二进制数字0。

二进制数与计算机之间有着紧密的联系。

大约在1948年,美国数学家约翰·威尔德·特克(JohnWilder Turkey,生于1915年)就意识到随着计算机的普及,二进制数很可能会在未来发挥更重要的作用。他决定创造一个新的、更短的词语来代替使用起来很不方便的五音节词—binarydigit。他曾经考虑使用bigit和binit,但是最终他还是选用了这个短小、简单、精巧而且非常可爱的词bit。

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

70

PDF 物理页索引 87

文件中的第 88 页 · 印刷页码:未识别

二进制数

托尼·奥兰多在他1973年所写的一首歌中这样请求他挚爱的人:“请在橡树上系上一条黄丝带”。他没有要求爱人进行详细的解释或者进行过多的讨论。他不想听到任何的“如果”、“而且”和“但是”。尽管这首歌是根据那些可能在真实生活中发生过的复杂感情和动人的往事所写的,但这个男人真正想要的答案仅仅是一个简单的“是”或“不是”。他希望在树上系一条黄丝带来表示“是的,尽管你做了很多错事,并且入狱三年,但我依然希望你可以回来和我共同生活。”他希望用树上没有系黄丝带来表示:“你连停在这里都别想。”

这是两个界线分明、相互排斥的答案。托尼·奥兰多并没有唱“如果你想考虑一下,就系半条黄丝带吧”或者“如果你不再爱我,但我们依然是好朋友,就请系上蓝丝带吧。”相反,他将问题简化得非常非常简单。

1 托尼·奥兰多(TonyOrlando),美国歌手,1944年出生于纽约,是一位希腊和波多黎各的混血儿,《老橡树上的黄丝带》是他的经典名曲,脍炙人口。歌曲描述一个在监狱服刑的丈夫在即将服刑期满的前夕,因担心远在家乡的妻子不接受他,写信告诉妻子,如果愿意再次接纳他,请在他出狱返家的当天,在家门口的老橡树上系上一条黄丝带;如果他没有看到黄丝带的话,他就会识相地默默离开。结果这位丈夫出狱返家时,家门口的老橡树上绑满了数以百计的黄丝带在空中飞扬,令他十分感动。后来,绑黄丝带成为全美国的一种风俗,表示迎接久别的亲人回家。—译者注

PDF 物理页索引 88

文件中的第 89 页 · 印刷页码:72

还有几个和系黄丝带具有同样效果的例子(但可能无法用在诗里):选择一种交通标志放在院子外面,来表示“请进”或“此路不通”。

或者在门上挂一个牌子:上面写着“关门”或“营业”。

或者用窗子里的一盏灯的亮灭来表示:“关闭”或“打开”。

如果这就是你想说的,你可以选择很多方法来表示“是”或者“不是”。你不需要用一句话、一个单词甚至一个字母来表达。你所需要的只是一个比特,也就是只需要一个0或1即可。

就如前面章节所提到的,十进制与其他数字系统相比并没有什么不同,只是我们通常使用它来计数。很明显,我们使用十进制数字系统是因为我们有十个手指。如果我们将数字系统建成八进制数字系统(如果我们是卡通人物)或四进制数字系统(如果我们是龙虾),甚至二进制数字系统(如果我们是海豚),也是合乎情理的。

但是二进制数字系统存在一点特殊性。这个特殊性就在于它是人们所能得到的最简单的数字系统。二进制数字系统中只有两个数字一0和1。如果想进一步简化这个数字系统,就只好把1去掉,最后我们就剩下的就只有一个数字0了。但仅用一个0是做不了任何事情的。

单词“bit(比特)”被创造出来代表英文“binarydigit”,它的确是和计算机有关的词语中最可爱的一个。当然,这个词也有它一般的意义:“一小部分,程度很低或数量很少”。这个意义很贴切,因为1比特——个二进制数字位——确实是一个非常小的量。

通常当一个新的词语出现的时候,它都会有自己新的意义。比特这个词也是这样的。1比特的意思并不仅仅是海豚用来计数的二进制数字位所包含的意义。在计算机时代,比特被看做是组成信息块的基本单位。

这是一个大胆的声明。当然,二进制数不是传达信息的唯一方法。字母、单词、莫尔斯码、布莱叶盲文和十进制数都可以来表达信息。关键在于,比特所传递的信息量极少。1比特是可能存在的最小的信息量。任何小于1比特的内容都根本算不上是信息。由于1比特表示的是可能存在的最小信息量,那么复杂一些的信息就可以用多位二进制数来表达(我们说比特传递的信息量“小”,并不是说它传送的信息不重要。事实上黄丝带对于与它相关的两个人来说是一个非常重要的信息)。

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

72

PDF 物理页索引 89

文件中的第 90 页 · 印刷页码:73

“听,我的孩子,你们很快就能听到保罗·里威尔(PaulRevere)午夜的马蹄声。”享利·沃兹沃思·朗福罗(Henry Wadsworth Longfellow)写到。尽管他在描述保罗·里威尔是如何通知美国人英国殖民者入侵的消息时不一定与史实完全一致,然而他确实提供了一个耐人寻味的利用二进制传递重要信息的例子:

他对他的朋友说:“今晚如果从镇里来的英国军队通过海路或陆路入侵,你就在北教堂钟楼的拱门处高高挂起提灯作为特殊信号一盏提灯表示从英军从陆路进军,两盏则表示英军从海路入侵…”

总结起来就是说,保罗·里威尔的朋友有两盏提灯。如果英国军队从陆路进犯,他会在教堂钟楼上挂起一盏提灯。如果英国从海路进军,他会将两盏提灯都在教堂钟楼上挂起。

然而,朗福罗并没有明确地提到所有的可能性。他留下了第三种可能的情况没有说,那就是英军根本没有入侵。朗福罗已经暗示,如果是这样的话可以通过不在教堂钟楼上挂提灯来表示。

假设两盏提灯实际上是永久固定在教堂钟楼上的。通常它们不会被点亮。

这代表英军还没有入侵。如果一盏提灯亮起:

或

9 二进制数

73