分享

计算机二进制编码的起源:摩尔斯编码

 阳关旧友 2022-12-01 发布于山东

尽管今天的计算机比起25年前,以及50年前的都复杂许多,但它们在本质上是完全一致的。学习技术发展史的重要意义正在于此:追溯的历史越久远,技术的脉络就变得越清晰。因此,我们需要做的就是确定某些关键的历史阶段,在这些阶段,技术最天然、最本质的一面将清晰可见。

或许大家都曾经在电影里看到这样的情节,两个水手在海上通过灯的亮灭来互相发送信号。而在另一部电影里,一个间谍转动一面镜子将太阳光反射到另一个房间里,从而向被俘的同伙传递信息。或许那正是解决问题的办法。如此一来,你就可以发明一种简单的技术。在这个方案里,字符表里的每个字符对应一连串的手电筒闪烁。“A”是闪一次,“B”是闪两次,“C”是闪三次,依此类推,“Z”就是闪26次。单词BAD可以用闪2次,闪1次,闪4次这样的一个组合来表示,而且在字符之间设置的小停顿使这个单词不至于被误认为是闪7次的字母“G”。另外,单词之间停顿可以稍长些。

这似乎很有希望,采用这种方案的好处是你不必在空中比划手电筒了,只要对准方向和按开关就行了。但是这种方案也有一个不足,那就是如果你想发送的第一个消息是“How areyou?”,那么你将总计需要让手电筒闪131次!而且,这还是忽略了标点符号的,你还没有设计闪多少次来对应一个问号。

但是这已经离答案更近一些了。我们能够肯定的是,在此之前一定有人也遇到过类似的问题,而你解决这个问题的思路也是非常正确的。等到了白天,跑一趟图书馆,查查资料,你发现了一个被称为莫尔斯电码(Morse Code)的伟大发明。这正是你想找的,尽管你现在必须重新学习如何去“写”字母表里的字母。

它们的不同之处在于:在你发明的系统里,字母表里的每个字母就是用一定数目的闪光表示的,闪1下为“A”,闪26下为“Z”。而在莫尔斯电码里,则有两种闪烁——短闪和长闪。当然这使得莫尔斯电码更加复杂,但是在实际应用里它被证明是更为有效的。句子“How are you?”现在只要闪32下(包含一些短闪和一些长闪),而不再是131下,而且这其中还包括了一个代表问号的编码。

当问及莫尔斯电码是如何工作的时候,人们并不会谈论“短闪”与“长闪”。相反,他们使用“点(dot)”和“划(dash)”,因为这是在打印纸上显示编码的一个便利方法。在莫尔斯电码里,字母表里的每个字母都与一个点划序列相对应,正如下表所示。

虽然莫尔斯电码和计算机毫无关系,但是,熟悉编码的本质对于深入理解计算机软硬件内部结构以及隐匿在其后的语言将大有裨益。在这本书里,编码这个词的意思是指一种用来在机器和人之间传递信息的方式。换句话说,编码就是交流。

在《百年孤独》这本书的开篇里,加西亚·马尔克斯回忆了一个时代,那时“这个世界刚刚出现,以至于很多东西缺乏命名,这时就有必要亲自用手指明这些事物”。我们赋予这些东西名字时往往是很随意的。这就好比说为什么猫不被叫做“狗”而狗不被叫做“猫”一样,没有什么理由可言。你可以说英语词汇就是一类编码。

当你和朋友最终熟记了莫尔斯编码之后(这是能熟练地收发编码的唯一方法),你们甚至可以在口语中使用它,用来取代正常的语言。为了使编码发送的速度最快,你可以把“点”读作“嘀(dib)”,把“划”读作“嗒(dab)”。文字也可以用同样的方式简化成“点”和“划”的序列,莫尔斯编码的口语版把讲话内容缩减到只剩下两个声音了。

问题的关键就在于数字2。两种闪烁,两种声音。事实上,两个不同的事物,只要经过适当的组合,就可以表示所有类型的信息,这的确是千真万确的。

我们很容易就能得到这样一个小公式:码字的数目 = 2编码的位数利用它就可以继续计算出更长位数的点划序列所能表示的码字数目了。

莫尔斯码也被称作二进制码(Binary Code),因为这种编码的组成元素只有两个——“点”和“划”。这跟硬币有些类似,因为硬币落到地上只能是正面朝上或反面朝上。二元对象(例如硬币)和二进制码(例如莫尔斯码)常常使用2的乘方来进行描述。

上面所做的关于二进制编码的分析工作,其实是数学的一个分支,称作“组合学”或“组合分析”,而我们所作的分析则只能说是一个简单的练习。传统意义上来说,因为组合分析涉及类似像扔硬币、掷骰子这样的需要对其组合数目进行推算的问题,所以它经常被应用到概率和统计学中。但是它对于我们理解码字的组合与分解也是十分有帮助的。

部分节选自《编码:隐匿在计算机软硬件背后的语言》前三章关于摩尔斯编码的部分

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多