一文搞清楚编码与进制

在数字电路的世界中,可以用「通电」代表「真」,用逻辑1表示;「不通电」代表「假」,用逻辑0表示。计算机只有「通电」和「不通电」两种状态,也就是说计算机只有2个数字可以用:0和1。

0和1有什么用,有了0和1就能做任何事情了吗?我们这篇就聊聊,0和1到底有多强大。

大家先回忆一下,小时候是如何认识这个世界的。

出生后,最先学会的单词是「妈妈」,随着和周围的人交流,更多接触这个世界后,逐渐认识了各式各样的东西。

四只脚+一个平木板的东西被称为「桌子」、汪汪叫的动物是「狗」,有一种看不见摸不着的物质是「空气」。

每一个物品,每一种现象,都有对应的单词进行描述。不知小时候的你小脑袋瓜里有没有过这样的好奇:「为什么」。为什么桌子被称为「桌子」而不是别的什么子;为什么用「妈妈」这个词表示生下我的那个女人,而不是别的什么xx;为什么汪汪叫的是「狗」,喵喵叫的是「猫」?

在《百年孤独》开篇中,作者马尔克斯回忆了一个时代。这个世界刚刚出现,以至于很多东西缺乏命名,这就有必要亲自用手指明这些事物。我才知道,人类赋予这些东西名字时往往是很随意的。猫不被叫做狗,狗为什么不被叫做猫,其实没有什么理由可言的。

为这些东西起个名字,或用文字符号表示,或用声音符号表示,其实就是编码。

编码

给某个东西起个名字说出来是一种编码,叫做「口语」;用文字写下来也是编码,叫做「书面语」。聋哑人用的编码叫做「手语」,如下图,是26个英文字母的手势。

盲人用的编码叫「盲文」。

手语是不同的动作代表不同的含义,盲文也类似,上面图你可以看到,每个字母都由6个圆点表示,有的圆点是黑色的,有的是灰色。

在屏幕上是这样表示给我们看的,但在实际的盲文刊物上,黑色大圆点是用特殊的打印机打印的凸起的点,灰色小圆点的位置是平的。

盲人可以用手感觉出来,知道了6个圆点组合代表什么,他们就可以读书了:

如果你仔细观察,我们上下楼的电梯里就有这样凸起的点,方便盲人乘用电梯:

计算机的世界里也有编码,不像物理世界可以编码为声音、动作,而是一切事物都被编码成了数字。

比如,1967年,美国发表了ASCII编码(美国信息交换标准代码,American Standard Code for Information Interchange),大写字母如下:

下次向你暗恋的女神表白时,不要简简单单说一句「我爱你」,我建议你凸显一下自己的学识,用美国的标准编码一下。

深情的注视着她,缓缓说出下面的数字:「 73,76,79,86,69,89,79,85 」

她一定会被你的高学识和一点点别有用心的幽默折服,相信我。

除了英文,我国在1981年发布了简体中文汉字编码国家标准GB2312,收录了7445个图形字符,其中包括6763个汉字。

还有国际通用对颜色的编码:

有了这些编码约定,不同的计算机之间就可以对话(交换数据)了。

进制

对于查数这件事,相信大家都和我一样,最先学会从1数到10,然后是10到100,我们习惯了逢10进1,习惯了用10的倍数来表达数量级。

0  1  2  3  4  5  6  7  8  9

10 11 12 13 14 15 16 17 18 19

20 21 22 23 24 25 26 27 28 29

为什么是10呢?其实很简单,因为人类有10个手指,手指非常便于计数,逢10进1符合我们的思维和行为方式。我们管「逢10进1」这样的规则叫做「十进制」

可以这样用十进制分解一个数:

1234 = 1个'1000' + 2个'100' + 3个'10' + 4个'1'

即,1234 = 1x103 + 2x102 + 3x101 + 4x100

这里的'1000',代表十进制的「一千」,即103

但其实算算数也可以不是十进制,任意进制都可以做计算,只要一直加一就好了嘛,到了进位时,最前面加一位,最后面归零。

比如五进制就是逢5进1:

0  1  2  3  4

10 11 12 13 14

20 21 22 23 24

上面是用「五进制」来计数的十五个数,看上去很不习惯,这里10不读作「十」,而是读作「一零」,它代表十进制中的「五」。

如果是五进制的1234,代表十进制的多少呢?

1234 = 1个'1000' + 2个'100' + 3个'10' + 4个'1'

注意,这里的'1000'并不代表的十进制的「一千」而是代表53,即十进制的「一百二十五」!如果换算成十进制,应该这样:

即,1234 = 1x53 + 2x52 + 3x51 + 4x50

= 125 + 50 + 15 + 4

= 194

即五进制的1234代表的十进制是194。

同样的,二进制就更简单了:

0  1

10  11

100  101

这是用「二进制」来计数的六个数,跟五进制一样,这里的100不读作「一百」,而是读作「一零零」,它表示十进制中的「四」。

开篇我们讲过,在计算机的世界中,只用「通电」和「不通电」两种状态,所以,计算机只能处理二进制的数据。

在计算机中,英文字符的编码是这样的:

汉字的编码是这样的:

end

现在可以用二进制给每一种事物编码了,不论是文字、颜色还是声音、图像、动作。

还能用门电路进行简单的逻辑处理。

我隐约觉得,在计算机的世界中,编码,就是硬件与软件的边界。

有了编码,接下来就要做些算数运算了,下一篇告诉你,计算机世界中,其实1+1是等于0的!

(0)

相关推荐