一文搞清楚编码与进制
在数字电路的世界中,可以用「通电」代表「真」,用逻辑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的!