电子技术应用|技术阅读
登录|注册

您现在的位置是:电子技术应用 > 技术阅读 > 「一沙一世界」之编码与进制

「一沙一世界」之编码与进制

点击「岩语物联网」关注,选择「设为星标不迷路

大家好,我是科岩。

在文章「」中,我引入过一个技术问题:

有2个设备A、B,通过网络连通可交互数据,其中A有外接按键,B有小显示屏。

2个设备实现这样的程序:A键盘上按下某个按键,B显示屏将按键值显示出来。

请问:从A按下按键那一刻起,到B显示屏看到按键值,”按键值“这个数据是怎么从A的按键传输到B的显示屏的?

为了讲明白这个问题,科岩写了一个系列的文章。

想知道计算机的物质基础是什么,看这篇:


想知道计算机世界中物质与逻辑的边界在哪里,看这篇:


上篇我们讲到,可以用「通电」代表「真」,用逻辑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的!

我是科岩,知其然,知其所以然,我们下期见喽。


---------------END---------------

文章到这里就结束了。

当然,也欢迎你加我私信和我交流:

你好,我是科岩。我做嵌入式工程师9年多了,目前在物联网创业公司任联合创始人。

我将持续分享个人的成长收获,帮助你提升技术能力与认知视野。另外我还听说,关注我的人个个都是人才,一起加油吧,人才们 :)