本文是《code 隐匿在计算机软硬件背后的语言》(英文版)的读书笔记,关于此专栏内容的介绍详见轻松了解计算机是如何跑起来的 | 序。告别抽象,挖掘本质,带你轻松了解计算机是如何跑起来的。
第一章 电筒密谈
编码是什么?在书中,这个词是指一种用来在机器与人之间传递信息的方式。换句话说,编码就是交流。对任何能听见我们的声音并理解我们所说的语言的人来说,我们发出的声音所形成的词语就是一种编码。那你试想一下,可以用手电筒代替声音和别人交谈吗?
假设你有一个最好的朋友,住在你家的对面,并且你们卧室的窗户刚好只隔着一条街,可以相互望见。每当到了夜晚,父母没收了你的手机,而你想要和你最好的朋友交谈,这该如何是好呢!你发现你床头有一个手电筒,你想:“是否可以用这个手电来和他交流呢?”
或许曾经你也背着家长在被窝里偷看小说,但你没有想过手电会说话吗?不要急于给出你的答案,这或许值得你这个小天才一试。
一年级的你就学过在纸上写字母和单词,把这个运用到手电筒上也合情合理。你可以站在窗前对着对面用光画出字母,让对面的小伙伴来看你写了什么。不过你马上会发现这个方法不太好,但你注视这来去飞舞的光柱,并把它们在脑海中组合起来,这不是一件容易的事情。
或许你又想到了另外一种方法,让字母表中的每一个字母与一定数目的闪烁对应。A闪烁1下,B闪烁2下...以此类推,Z就需要闪烁26下。这样子看起来比上面的方法好很多,你不需要在空中挥舞手电用,只需要瑞准位置按开关即可。但是缺点也很明显,你试图发送一个“HOW ARE YOU” 的信息需要131次闪烁。
其实你已经接近问题的解决了,可以参考一下神奇的 “摩尔斯电码”(morse code)来思考。应用到我们这里,你可以用“长闪烁”和“短闪烁”来表示传递信息。其实摩尔斯电码的工作原理中,与手电筒 “长闪烁” 和 “短闪烁” 对应的是 “划” 和 “点”,在摩尔斯电码中,字母表中的每一个字母与一个点划序列相对应,如下表:
用手电筒发送摩尔斯电码的时候,手电筒的快速打开闭合代表一个点,让手电筒照亮稍长的时间则代表一个划。举例来说,发送字母 A,要先快速地合开开关,然后再稍慢些合开。在发送下一个字母前要有短暂的停顿。约定划的时间大约是点的 3倍。例如,如果点的照亮时间为 1 秒,那么划就是3秒。(实际上,摩尔斯电码的传递速度要快得多。)接收者看到了短闪和长闪就知道是A。 当然,为了方便区分,同一个单词内字母间需要有一定时间空隙,不同单词间的时间空隙要更大一些。
end
欢迎关注个人公众号“ 鸡翅编程 ”,这里是认真且乖巧的码农一枚。
---- 做最乖巧的博客er,做最扎实的程序员 ----
旨在用心写好每一篇文章,平常会把笔记汇总成推送更新~