元数据
高亮划线
译者简介
左飞技术作家、译者,除本书外他还翻译了《代码阅读》和《代码质量》两部计算机领域的经典著作(两书分别荣获第14届和第17届美国Jolt图书震撼大奖),其所著的《代码揭秘》一书繁体版在中国台湾地区出版发行。
薛佟佟在南京航空航天大学取得工学硕士学位后加入中国移动通信集团,长期专注于云计算及分布式存储技术的研究与应用。他是中国移动公众服务云与一级私有云的核心推动者,同时是《提高C++性能的编程技术》(收录于电子工业出版社“传世经典书丛”)一书的译者。
关于作者
Charles Petzold是Windows编程界的一位大师,当今世界顶级技术作家。1994年5月,Petzold作为仅有的七个人之一(并且是唯一的作家)被《视窗杂志》和Microsoft公司联合授予Windows Pioneer奖,以表彰他对Microsoft Windows所做出的贡献。
从1986年到1995年,Petzold为PC Magazine撰写专栏文章,向读者介绍Windows和OS/2程序设计等方面的知识。直到今天他依然保持着Windows GDI程序设计首席技术作家的地位。其大作Programming Windows(Windows程序设计)是尽人皆知的Windows编程经典,曾深深地影响过一代程序员,该书目前已出至第5版。
内容简介
这是一本讲述计算机工作原理的书。不过,你千万不要因为“工作原理”之类的字眼就武断地认为,它是晦涩而难懂的。作者用丰富的想象和清晰的笔墨将看似繁杂的理论阐述得通俗易懂,你丝毫不会感到枯燥和生硬
更重要的是,你会因此而获得对计算机工作原理较深刻的理解。这种理解不是抽象层面上的,而是具有一定深度的,这种深度甚至不逊于“电气工程师”和“程序员”的理解。
不管你是计算机高手,还是对这个神奇的机器充满敬畏之心的菜鸟,都不妨翻阅一下本书,读一读大师的经典作品,必然会有收获。
编码(biān mǎ)3.a.一种在信息传输过程中用来表述字母或数字的信号系统。b.由被赋予了一定主观意义的符号、字母以及单词所组成的系统,该系统可用于传输需要保密或简短的信息。4.一种由若干符号和规则组成的系统,用来向计算机表述指令。——摘自《美国传统英语词典》
推荐序
《道德经》有云:大方无隅,大象无形,也就是老子所说“道”的至高境界。世界上最恢宏、壮丽的气派和境界,往往并不拘泥于一定的事物和格局,而是表现出“气象万千”的面貌和场景,科学知识的论述也是如此
科学不一定等同于晦涩和深奥,最复杂的理论也可用最简单的方式描述。这就是普遍存在于现实世界的辩证的、朴素的唯物主义精神。
尤其这本畅销多年、经久不衰的《编码——隐匿在计算机软硬件背后的语言》(Code: The Hidden Language of Computer Hardware and Software)更是化腐朽为神奇,改晦涩为通俗之杰作。即使读者不是计算机专业的人士,在Petzold笔墨的引导之下,也能够轻松阅读该书
书中使用像电线、电灯泡、触发器等这些非常常见的零件,拼拼接接,最后令人惊异地建造了一台电子计算机。读者在阅读过程中,循序渐进地学习有关计算机系统基础和构造的知识,作者的奇思妙想和妙趣横生的讲述方式不得不令人赞叹
透过现象进而探索本质可以发现新事物;将复杂的事物简单化,可以发现解决问题的新方法。
作者将那些看似复杂的理论转换成我们熟悉的诸多景象,使读者不由自主地跟随他的思路打造这台只有电线、电灯泡和触发器组构成的庞大的计算机系统。
为学日益,为道日损,损之又损,以至于无为,无为而无不为
丁秋林教授,博士生导师,南京航空航天大学信息科学与技术学院和机电工程学院资深教授。英国皇家航空学会高级会员、英国剑桥世界名人录传记人物(IBC Cambridge the 28th Edition)、美国世界名人录传记人物(Who’s Who in the World the 16th Edition)、国际高级制造技术杂志编辑部成员(Springer)。
译者序
他首先从历史的角度审视了计算机技术的发展脉络,继而自底向上地将计算机体系结构方面的知识娓娓道来。在Petzold的笔触下,导线、灯泡以及触发器等简单部件,通过精妙的组装,竟然构建出了一台电子计算机
why we learn tech history — 人的理解是主观的,可能是误差相对更大的。钻进历史可以让我们在一些更客观的记录中对技术/知识本质有更进一步的理解
为了能够将该书的精彩原原本本地呈现给广大中国读者,并在保证质量的前提下力争让该书早日与广大读者见面,本书的译者始终秉持着谨慎严肃的态度,对许多词句都推敲再三,力求精益求精
在此期间,我们得到了许多师长和友人的支持与帮助,感激之情溢于言表。特别是南京航空航天大学丁秋林教授,他对我们的翻译工作给予了极大的支持,并欣然为本书提笔作序,在此我们对丁教授表示诚挚的谢意。
参与本书翻译工作的人员还有初甲林、刘悦、高新、高阳、邓明强和赵德志。此外赵学健、欧阳键两位博士也参与了部分章节的审校工作,在此也向他们一并表示感谢。
bó shì
· 官名。源于战国。许慎《五经异义》:“战国时,齐置博士之官。”《汉书·百官公卿表上》:“博士,秦官,掌通古今。”秦及汉初,博士的职责主要是掌管图书,通古今,以备顾问。汉为太常属官,秩比六百石,员额多至数十人。汉武帝时,用公孙弘议,设五经博士,宣帝时增至十二人。博士置弟子,初为五十人。自武帝后,博士专掌经学传授,与文帝、景帝时的博士制度有异。
唐置国子、太学、四门等博士。另有“律学博士”“书学博士”“算学博士”“府学博士”“州学博士”“县学博士”之称,均为教官,而非中央官学传授儒经学官的专称。明清亦有国子博士。
· 指专精一艺的职官。西晋始置律学博士,北魏始置医学博士,隋、唐又增算学博士、书学博士等,至宋代废。
· 学位的一种。一般为最高一级的学位。在中国,高等学校和科学研究机构的研究生,或具有研究生毕业同等学力的人员,通过博士学位的课程考试和论文答辩,成绩合格,学术水平达到在本门学科上掌握坚实宽广的基础理论和系统深入的专门知识;具有独立从事科学研究工作的能力;在科学或专门技术上做出创造性成果者,授予博士学位。
作者序
这本书将带领大家通过一段信息技术革命的旅程重新感触现代计算机技术。
明喻与暗喻是文学描述中精妙的辅助手段,但它们常常掩盖了科学技术的真正光芒。
明喻是用“像、如、似”等词把两个不同事物直接比作彼此相似,本体、喻体、喻词三者俱全,比如“海燕像黑色的闪电”。文中作者认为明喻虽能生动辅助文学描写,却常把技术真相遮蔽,因此对“用火车运01数据”这类明喻表示保留。
比喻最可怕的地方走了,在于让读者以一种模糊的方式明白,之后就放弃精确的理解,结果始终无法真正理解。
比喻的手法常用于对初学者或是非专业人士使用,主要目的是为了让他们易于理解其中的道理,并不深究。但对于专业人士,应该学会熟悉专业词汇和严谨罗辑思维的表达方式。
因为就我个人来说,也是在不经意之间才体会到理解事物如何运作这一过程是多么有趣。但是这并不意味着我对世上一切事物的运作机制都感兴趣
‘存储器(storage)’与‘内存(memory)’有何区别?”
存储器即计算机里的硬盘(包括机械硬盘和固态硬盘),断电后数据仍然保存;内存即电脑里的内存条,断电后数据消失,用来临时存储数据,加快CPU访问硬盘的速度。
一个是存储的空间,一个是供以运行的空间。就像一个商城要运作,要有仓库放库存,也要有足够的门店空间承载客流。
内存是存储器的子集。
存储器分寄存器(cpu内部),高速缓冲器,内存(只读存储器,随机存储器),外存(固态硬盘,u盘等等)
像这类“存储器-内存”问题的解答大都使用类比法:“内存就好比你的办公桌,而存储器就好比你的文件柜。”就问题本身而言,它的确给出了满意的回答
我对此答案并不满意,主要原因在于这个答案将计算机的体系结构与办公室的结构等同起来,但是内存与存储器的区别其实是在逻辑层面上的,它体现着计算机体系结构的实际需求与存储器客观性能之间的矛盾
简单地说就是我们找不到一种同时具备这两种存储器所有优点的存储媒介,这些优点就包括存储速度块、存储容量大、非易失性等等。今天的计算机都采用“冯·诺依曼体系结构”——五十年来它一直是计算机体系结构的主导,而内存与存储器的区分也正是由于这种体系结构的不足所导致的。
还有一些计算机用户问我这样一个问题:“为什么Macintosh环境下的程序不能在Windows下运行?”我想立刻回答这个问题,但在我刚刚张开嘴的时候就立刻意识到,这个问题涉及太多的技术细节,要想彻底搞清楚,那提问的这位朋友也一定非准备和我来一次“茶话会”不可。
计算机是二十世纪技术领域的“登峰造极之作”,它是一种值得欣赏、具有“美”学文化底蕴的人类伟大成果,这种“美”不需要明喻与暗喻的额外修饰。
以前觉得序言不重要,看多了才知道,序言能看出一本书的写作目的,判断这本书值不值得读,像另一位书友讲的,序言能看出作者的真诚与否
我以前是不怎么看序言的,觉得都是一些自夸自擂的废话,但是后来发现要判断一本书值不值得读最容易的方法还是读序言,因为没有认真写书的作者,他的序言里的一定会暴露点什么东西,而好书的作者一定会让你感到真诚。所以在这本书的序言里读到这句话,我觉得非看不可了。
学习技术发展史的重要意义正在于此:追溯的历史越久远,技术的脉络就变得越清晰。因此,我们需要做的就是确定某些关键的历史阶段,在这些阶段,技术最天然、最本质的一面将清晰可见。
至少从理论角度来看,本书的前17章中提到过的所有设备,都可以利用已经存在了一个世纪的简单电子器件来构造。
我最后还是要说,书里面没有那种装载着一节又一节“0, 1数据”的“火车”图片。
跟一个学计算机的男生在网上断断续续聊了两个星期的样子,他突然把我删了,搞不懂(=_=)!好奇编码,搞对象黄了,起码让我长点知识。
笑死我了,也许他在你人生中就是只需要起到一个引导你对编码产生兴趣的作用呢()
专业书上,一上来就给你摆那种图,我看着头疼,所以我来拜读一下这本书,从底层开始了解
1 至亲密友
至亲密友
你今年10岁,你最好的朋友就住在街对过。
事实上,你们各自卧室的窗户正好彼此相对。每当夜幕降临,父母就如同往常一样,早早地催促你该上床睡觉了,但是你和你的朋友还想交流想法,交换见闻,分享各自的秘密,或者扯扯闲话,开开玩笑,聊聊梦想。这本无可厚非
无论怎样,渴望交流本来就是人类最主要的天性之一。
如何交流呢?或许可以打电话?10岁小孩的房间里会有电话吗?
想起小时候小伙伴准备了两只口哨,说一吹口哨就会到我身边,现在想来显然是电视剧看多了
众所周知,手电筒是为了让孩子们能够躲在被子下看书而发明的
这就是你们麻瓜世界吗,我们霍格沃茨小魔法师都是掏出魔杖来一句Lumos就好了(参见电影《阿兹卡班》开头)(不是)
一名叫休伯特的美国人,有一天在下班回家途中遇上一位朋友。这位朋友邀请他回家,说要给他看一样有趣的东西。原来这位朋友自制了一个会发光的花盆,他在花盆的底部安装了一个小灯泡和一节小电池,当电流通上时,灯泡会发出亮光照耀着花朵,十分漂亮。休伯特很喜欢这个会发光的花盆,因此触发了他的灵感,发明了手电筒。
它们当然是很安静的,并且光线是高度定向的,同时光线也不会渗漏出卧室而引起家人的疑心
当你看着朋友的手电筒在空中圈圈点点时,会发现很难在头脑中组合出那么多复杂的笔画。这些旋转和倾斜的光线都太不准确了。
一个间谍转动一面镜子将太阳光反射到另一个房间里,从而向被俘的同伙传递信息
在这个方案里,字符表里的每个字符对应一连串的手电筒闪烁。“A”是闪一次,“B”是闪两次,“C”是闪三次,依此类推,“Z”就是闪26次
这似乎很有希望,采用这种方案的好处是你不必在空中比划手电筒了,只要对准方向和按开关就行了
但是这已经离答案更近一些了。我们能够肯定的是,在此之前一定有人也遇到过类似的问题,而你解决这个问题的思路也是非常正确的。
等到了白天,跑一趟图书馆,查查资料,你发现了一个被称为莫尔斯电码(Morse Code)的伟大发明。这正是你想找的,尽管你现在必须重新学习如何去“写”字母表里的字母。
莫尔斯电码是1837年美国人莫尔斯和维尔发明的时通时断信号代码,用点“·”、划“—”及不同停顿组合表示字母、数字和标点。它曾是电报、无线电标准,1999年停止强制使用,如今仍被业余无线电爱好者沿用,SOS求救信号即“···———···”。
句子“How are you?”现在只要闪32下(包含一些短闪和一些长闪),而不再是131下,而且这其中还包括了一个代表问号的编码。
相反,他们使用“点(dot)”和“划(dash)”,因为这是在打印纸上显示编码的一个便利方法。
熟悉编码的本质对于深入理解计算机软硬件内部结构以及隐匿在其后的语言将大有裨益。
在《百年孤独》这本书的开篇里,加西亚·马尔克斯回忆了一个时代,那时“这个世界刚刚出现,以至于很多东西缺乏命名,这时就有必要亲自用手指明这些事物”。
对任何能听见我们的声音并理解我们所说的语言的人来说,我们发出的声音所形成的词语是一种可识别的编码。我们将这个编码称为“口头话语(the spoken word)”或“言辞(speech)”
对于写在纸上(或刻在石头上、木头上,或者在空气中比划)的词,我们还有其他的编码方式。这种编码以手写字符或打印在报纸、杂志以及书本上的字符形式出现。我们叫它“书面语言(the written word)”或“文本(text)”
在许多语言里,语言和文字之间存在着很紧密的联系。例如,英语中的字母和字母组合与它们的发音(或多或少)存在一定的对应性。
对于那些丧失听说能力的的聋哑人而言,人们发明了另一种编码来帮助他们进行面对面的交流。这就是手语。手语通过手和臂膀形成的动作和姿势来传达词语中的单个字符或者整个词语,以及基本的概念
对于那些失明的人,书面语言可以用布莱叶盲文(Braille)来替代。这种文字使用一系列凸起的点来代表字母、字母串以及整个单词。当话语必须快速抄成文本时,缩写和速记都是很有用的。
我们使用各种不同的编码来为我们自己的交流服务,因为有些编码有时比其他编码更便捷。
因此,莫尔斯编码就成了一个方便的选择。如果一种编码可以用在其他编码无法取代的地方,那么它就是一种有用的编码
任何事物但是这样
二进制,摩尔斯密码,文字,语言,手语,盲文。特定的编码可以根据特定场景进行信息压缩的优化,进而使沟通更为简单;适用场景广的编码可以压缩的信息优先,沟通繁琐。
计算机不能直接处理人类的编码,因为计算机无法通过与人类的眼睛、耳朵、嘴巴和手指完全相同的方式来接收人类发出的信息。
所有这些类型的信息都需要它们各自的编码,就像人类说话需要一套器官(嘴和耳朵)而写作和阅读需要另一套(手和眼)一样。
如果“点”的时长是1秒钟,那么“点”和“划”之间的停顿也应该是1秒钟
一个小问题,即阅读莫尔斯编码信息会变得很困难,但是经过一两个字母之后,接收者通常就可以分清楚哪一个是“点”,哪一个是“划”了。
三个点、三个划,再加三个点就表示SOS,即国际求救信号。SOS不是一个缩写,这只是一个易于记忆的莫尔斯编码序列。
在第二次世界大战期间,英国广播公司一些无线电广播以贝多芬第五交响曲的片段来作为节目的前奏——BAH, BAH, BAH, BAHMMMMM,而贝多芬绝不会想到他所谱写的这段乐曲可以表示为莫尔斯编码的V,即胜利(Victory)之意
莫尔斯编码的一个缺点是,它没有区分大写字母和小写字母。但是除了可以代表字母外,莫尔斯编码还使用一组由点和划组成的五元序列来表示数字,如下所示。
必须连续地传递这三个字母,而且字母之间只有一个点的停顿时间。
除了一个可以滑动的开关外,这种手电筒还有一个按钮开关用来控制灯光的明灭。
你们甚至可以在口语中使用它,用来取代正常的语言。为了使编码发送的速度最快,你可以把“点”读作“嘀(dib)”,把“划”读作“嗒(dab)”
事实上,两个不同的事物,只要经过适当的组合,就可以表示所有类型的信息,这的确是千真万确的。
2 编码与组合
莫尔斯码(Morse Code)是由塞缪尔·莫尔斯发明的(1791—1872),在本书的其他章节中我们还将频繁地提到他
莫尔斯码其实是伴随着电报机的问世而被发明的,关于电报机,我们在后面也将做详细的探讨。正如通过研究莫尔斯码我们可以很方便地理解编码的本质一样,通过电报机来了解计算机硬件也是个不错的途径。
编码本质是一张映射表,对人而言,你脑海里这样的一张表,我也有这样的一张表,这样我们就可以相互交流了。
而对计算机而言,也设计了一份表给计算机 比如ASCII表,所以早期程序员想要和计算机交流,也需要掌握ASCII表(二进制与字符的映射表),如果你想让计算机执行加法操作,你就需要操作计算机一条一条执行指令(=操作码+操作数),指令的本质又是二进制,而计算机通过ASCII的映射关系,就知道翻译后的二进制代表什么涵义
复杂信息如何通过简单元素的排列组合叠加编排规则来表达,比如通过0,1两个基本元素构建表达一切信息的语言系统,就是计算机领域编码的一种实现形式。 本质上所有语言都是对现实世界的一种编码,比如英语使用26个字母的排列组合,汉字则是通过对事务的象形性表达。
比起发送莫尔斯码,接收编码并进行解码要费时费力得多,因为译码者不得不根据一串由“点”、“划”组成的晦涩的编码序列来反查字母。
问题就出在这里,因为我们现在只有一张提供“字母→莫尔斯码”的编码表,而缺少一张可以实现反向查询的“莫尔斯码→字母”译码表。
似乎这些字母对应的“点-划”序列并没有什么规律。所以忘掉字母序列吧。或许根据编码中所包含点、划的多少来对其进行分组,是一个更好的组织这些编码的方法。
一组含有2个点或划的编码组合,可以给我们呈现出4个字母——I, A, N和M。
一组含有3个点或划的莫尔斯码可以为我们表示更多的字母。
一串由4个点或划组成的莫尔斯码就可以表示16个字符
当接收到某一代表特定字母的码字后,你就可以知道其中所包含的“点”和“划”的数目,那么你至少可以很快找到对应的表格去进行查找
每个表格所含有的码字,可以看成是在前一张表格所包含的全部码字上再加一个“点”,或者再加一个“划”而组成的新码字。
第一张表含有2个码字,那么第二张表则含有2×2个码字,而第三个表就有2×2×2个码字。
数字2、4、8和16都是以2为底数的幂值,因为你可以通过使其自身乘2来得到它们
现在这个表已经变得很简洁了。如果知道了码字中“点”和“划”的数目,那么以这个数目为指数的2的幂运算结果就是其总共可以表示的码字数。
码字的数目=2“点”和“划”的数目
为了让莫尔斯码的解码过程更加简单,或许画张图会有所帮助,例如下面这张树型图。
一串由5个“点”或“划”组成的编码串可以为我们提供32(2×2×2×2×2,或25)种扩展的码字。
这对莫尔斯码来说有点太多了,甚至还留下了很多“未定义”的码字。这里“未定义”用来表示那些不代表任何字符的码字。如果你在接收莫尔斯码的时候收到了一个未定义码字,可以肯定发送方一定是出了差错。
莫尔斯码也被称作二进制码(Binary Code),因为这种编码的组成元素只有两个——“点”和“划”。
上面所做的关于二进制编码的分析工作,其实是数学的一个分支,称作“组合学”或“组合分析”
传统意义上来说,因为组合分析涉及类似像扔硬币、掷骰子这样的需要对其组合数目进行推算的问题,所以它经常被应用到概率和统计学中。但是它对于我们理解码字的组合与分解也是十分有帮助的。
3 布莱叶盲文与二进制码
布莱叶盲文与二进制码
塞缪尔·莫尔斯并不是第一个将书面语言的字母成功编码的人。实际上,在因自己的名字被用来命名某种编码方式而名声大噪的人中,莫尔斯先生也不是第一人
这项荣誉应该归一个法国盲人小伙子所有。尽管他比莫尔斯要晚出生18年,但是他很早就创建了自己的编码规范。他的生平鲜为人知,尽管关于他的故事流传至今的为数不多,但这也足以构成一个引人注目的传奇。
在布莱叶3岁的时候——一个本不该在父亲的工作间玩耍的年纪——他不小心被一个尖锐的工具刺伤了一只眼睛。伤口感染也影响到了他的另外一只眼睛,最后使他的双目完全失明。
“交感性眼炎:当一只眼睛遭遇严重外伤,如贯穿伤导致的眼球破裂,眼睛的血眼屏障会遭到严重破坏。当这个屏障被破坏后,免疫细胞会发现眼睛的存在,并将受伤的眼睛视为“入侵物”。随后,这些免疫细胞可能会对另一只没有受伤的眼睛也发起攻击,导致交感性眼炎的发生。交感性眼炎是一种严重的眼部疾病,可能导致视力下降甚至失明。”
看到一种说法是,免疫系统不知道有眼球这个组织。一眼受伤,眼球和体内的屏障被打破,免疫系统进去受伤眼球,再通过受伤眼球进入好眼球,把好眼球当做入侵者。
但是小路易斯对知识的渴望和过人的智慧很快被人们所发现。他最初同其他孩子一样在镇上的小学上学,后来在他10岁的时候,在小镇牧师和一名学校老师的帮助下,布莱叶被送往巴黎皇家盲人学校学习。
但是这种文字系统使用起来很困难,而且使用这种方法来印刷的书籍也非常少。
霍伊先生或许没有意识到,有一种完全不同于印刷字母的文字系统可能更加适合盲人阅读。
他在厚纸上使用凸起的点和划的组合来表示文字,这样当部队需要无声交流的时候,即使光线很暗,士兵们也可以通过这些符号互相传递信息。
巴比尔文字系统的缺点是太过复杂了。
布莱叶在12岁的时候就很熟悉巴比尔的这种文字系统了。
路易斯·布莱叶开始不辞辛劳地改进这个文字系统,3年以后(那时他15岁)就创建成了自己的系统,而这个系统中的一些基本规范,直到今天仍在被人们所使用。
1835年,路易斯·布莱叶患上了肺结核。1852年,就在布莱叶43岁生日刚过完不久,病魔无情地夺走了他的生命。
近些年来,布莱叶盲文被越来越多地应用到公共场所中,使得盲人朋友们可以越来越方便地使用电梯、自动取款机等设备。
在这一章中我们将解析布莱叶盲文,来看看它是如何工作的。我们并不是要真的学习布莱叶盲文,而且也无须刻意记住什么关于它的内容。我们仅仅希望从中窥探到编码的一些本质。
编码,盲文是一种编码,任何一种语言也是一种编码,编码形式不一样的。
如前所述,只要这种编码方式能用于特定的环境传递信息,那么它就是一种有效的编码。布莱叶盲文无疑满足这个要求。
即使只是用布莱叶盲文在本书中印上几页,造价也实在是有点儿高,所以我在书中使用一种符号来表示布莱叶盲文。在这种表示方法中,点码单元中所有的6个点都会被表示出来。大点表示这是一个凸起的点,小点则表示其对应的位置是平的。
涨知识:
盲文图书的印制非常复杂,是一种专用的技术,包括它的纸张都是自成体系的。通常盲文是通过类似金属板冲压这种方式印制的。
盲文图书一般是16开,大小约为25x30厘米,需借助于一块点字凸起的阳图版和一块点字下凹的阴图版,把纸张置于两块版中间,通过压印在纸张的正反两面出现凸起的点。盲文图书每面至多容纳310个汉字,因此一本很薄的汉文读物制成盲文图书后,体积和厚度要增加10倍。
一本约10万字的书籍转译成盲文时,就变成每本大约七八厘米厚的两本书了,如三卷本的《红楼梦》译成盲文书后就有16册之多。
加上盲文专用纸张价格较高、工时较长等因素的影响,尽管译成盲文的作品不需要向作者支付版税、稿费等,但盲文出版物的成本仍高得出奇。例如,一本零售价6元的《读者》杂志,印成盲文版的成本为210元,是正常读本的35倍。
目前,在一张A4纸上打印盲文的成本还是比较高,大约在1.1美元(约合人民币7元)
令我们感兴趣的是,这些点码都是二进制的。一个单独的点不是平的就是凸起的。也就是说我们可以把在莫尔斯编码中学到的知识应用到布莱叶盲文的分析中!
布莱叶盲文系统能够表示64个不同的码字。下图就是所有可能的64种码字。
还是让我们来开始解析布莱叶盲文吧,首先看看基本的小写字母表。
第一排(字母a到j)只用到了点码单元中最上面的四个点——第1、2、4和5点。第二排在复用了第一排的编码的基础上,把第3点改为凸点。第三排也沿用了同样的规律,只是将第3和6点改为凸点。
二级布莱叶盲文使用了很多缩写,以便于保存树型结构和提高阅读速度
我们已经描述了31个码字——单词间的大空格(即没有凸点的点码单元)以及总共3排每排10个的字母和单词码字。
我们可以使用字母a到j的码字加6号凸点的组合。这些新码字通常用来表示单词中字母串的缩写,还有我们前面所担心的w字母(像上文的二级布莱叶盲文单词编码一样,表示w字母的编码也可以表示一个单词)。
我们取从a到j的码字,“降低”它们使用的点位,只用到编号为2、3、5和6的点,这样就得到了新的码字
前4个码字分别表示逗号、分号、冒号和句号。
表示字符串缩写“ble”的码字很重要,因为当它不是用来作为单词的一部分时,它的出现就意味着之后的码字应被译为数字。
如果你还要继续下去,那么我们还需要定义7个码字才算完全用满原有的64个码字。它们是:
无法想象,假如他们用的是中国的象形文字,可能根本没法发明出这种系统
,我们还有6号凸点——大写标识符。这个符号表示它之后的字母将都被译为大写
这串编码分别表示了一个大写字母标识符、字母l、缩写字符串ou、字母i和s,以及一个空格,再加一个大写字母标识符,还有字母b、r、a、i、l、l和e。(在实际应用中,可能会把名字末尾不发音的2个字母省略掉,以进一步压缩编码)
布莱叶盲文点位讲解(Louis Braille)
布莱叶每个字符是6点矩阵,排布:
plaintext
1 ●
● 4
2 ●
● 5
3 ●
● 6
左列:1、2、3;右列:4、5、6;黑点=凸起,○=不凸起
例子人名:Louis Braille
完整盲文序列:
[大写标识符] L O U I S [空格] [大写标识符] B R A I L L E
- 大写字母标识符(逃逸码,只有6号点凸起)
作用:仅下一个字符大写
plaintext
○ ○
○ ○
○ ●
点位:只有6号点凸起。本身不是字母,是控制符号。
- L(紧跟大写标识符 → 大写L)
plaintext
● ○
● ○
○ ●
点位:1‑2‑6
- O
plaintext
○ ●
● ○
○ ●
点位:2‑4‑6
- U
plaintext
● ●
○ ○
○ ●
点位:1‑4‑6
##5. I
plaintext
○ ●
● ○
○ ○
点位:2‑4
##6. S
plaintext
● ●
● ○
○ ○
点位:1‑2‑4
👉 到这里: [大写] L o u i s 也就是 Louis
##7. 空格
全部点都不凸起
plaintext
○ ○
○ ○
○ ○
##8. 第二个大写标识符(再次开启,下一个字母大写B)
plaintext
○ ○
○ ○
○ ●
依旧只有6号点凸起。
##9. B(紧跟大写标识符 → 大写B)
plaintext
● ○
● ○
○ ○
点位:1‑2
##10. R
plaintext
● ○
● ●
○ ○
点位:1‑2‑5
##11. A
plaintext
● ○
○ ○
○ ○
点位:1
##12. I
plaintext
○ ●
● ○
○ ○
点位:2‑4
##13. L
plaintext
● ○
● ○
○ ●
点位:1‑2‑6
##14. L
plaintext
● ○
● ○
○ ●
点位:1‑2‑6
##15. E
plaintext
○ ●
○ ○
○ ○
点位:4
👉拼完: [大写] B r a i l l e → Braille
完整拼出人名:Louis Braille(路易·布莱叶,盲文发明者)
重点概念再对应
1. 大写标识符 = 逃逸码 escape code
只修改紧挨着的下1个字符,之后自动恢复普通小写模式,不会一直持续生效。
所以名字开头L、姓氏开头B,前面各放1个大写标识符。
2. 对比换档码 shift code(数字标识符)
一旦出现,后面一大串全部切换成数字模式,直到另一个标识符切回字母;它的作用范围是一整段,不是单个字符。
3. 6个点总共有 2^6=64 种组合。很多点图案一物两用,含义取决于前面是什么控制码。
整串直观连写(每个方框是一个盲文字符)
plaintext
[大写]| L | O | U | I | S |空格|[大写]| B | R | A | I | L | L | E
原文还提到:实际书写可以省略末尾不发音的 e,来压缩盲文编码。
如果你需要,我可以给你做一张简易对照表,快速看懂盲文6点每个位置含义。
综上所述,我们将6位二进制码(其实是6个点)所能表示的全部64种可能的编码都罗列了一遍。而且这64组编码中有很大一部分,根据上下文的不同将有着双重身份
像这样的编码通常被称作“优先码”(precedence codes)或者“换档码”(shift codes)
大写字母标识符表示紧随它的字母(而且仅仅是紧随它的字母)应该被译为大写。类似这样的编码被称为“逃逸码”(escape codes)。逃逸码让你“逃离”对编码串单调的、一成不变的解析,而转入一种新的解析方式中
在使用二进制码对书面语言进行编码时,换档码和逃逸码是相当常见的。
4 手电筒的剖析
4 手电筒的剖析
电是一种神奇的现象。
手电筒无疑是大多数家庭里最简单的家用电器
你只需要电池和灯泡就可以自己来做一个简单的手电筒了。
注意,在上图的右边,我们可以看到两个断开的线头,那就是开关。假设这两个电池没有问题,灯泡也没有烧坏,让这两个线头互相接触,就可以点亮灯泡。
哈哈,感觉像在教小学生,不过还是很喜欢这种写作风格。
“水和水管”这个比喻经常被用来解释电流工作的原理,但是这种模型就如同所有其他的类比一样最终也无法自圆其说。
众所周知,所有的物质——我们所能看到和感觉到的事物——(通常情况下)都是由叫做原子(atom)的极其微小的东西组成的。每一个原子又由三种粒子构成:它们分别是中子(neutron)、质子(proton)和电子(electron)。你可以把原子的结构画成一个小太阳系,其中中子和质子被束缚在原子核内,而电子则围绕着原子核旋转,犹如行星围绕太阳旋转一样。
我要提醒大家的是,如果你能搞到一个放大倍数很大的显微镜足以看清原子结构的时候,你会发现这张图与原子实际的样子并不一样。但是我们可以把它当做一个研究模型,方便我们进行一些探讨。
实际上电子的运动速度特别快,在原子核外并不会呈现出一个轨道,而是呈现出一种云的形态。
上图所表示的原子包含有3个电子、3个质子和4个中子,这表明它是一个锂原子。
原子之间可以通过化学的方式结合形成分子(molecules)。分子的性质通常与组成它的原子大相径庭。例如,水是由水分子组成的,每个水分子由两个氢原子和一个氧原子(即H2O)构成。
氢、氧、钠和氯都是元素。水和盐都是化合物(compound)。不过盐水是混合物(mixture)而不是化合物,因为水和盐都各自保留着它们自己的性质。
电子(electron)和电(electricity)这两个单词都是起源于古希腊文“ηλεκτρον(elektron)”,关于这个词,你可能会猜测它是表示“微小而又无形的东西”之类的意思
ηλεκτρον的意思是“琥珀(amber)”,它是树的汁液硬化后变成的一种玻璃状固体。这两种风马牛不相及的东西会被联系到一起的原因源于古希腊人所进行的试验,他们曾经通过琥珀摩擦羊毛,产生了我们称之为“静电”的东西
丝绸摩擦玻璃棒,玻璃棒带正电。羊毛摩擦琥珀,琥珀带负电。哈哈
质子和电子都具有带电荷(charge)的性质。质子有一个正电荷(+),电子有一个负电荷(-)。中子是中性的,因而不带电荷
使用这些符号仅仅表示质子和电子在某个方面上的性质是相反的。这个相反的特性也正表明了质子和电子是相互关联的。
当地毯偷偷摸摸地从你的鞋子上挖走电子后,一切会在你触摸到一些东西而感到被电了一下时,又回归到平衡状态
质子和电子之间的关系还可以这样描述,就是异性电荷相吸引,同性电荷相斥。
原子核中的质子被一种力量束缚到一起,这种引力要强过同性电荷之间的斥力,我们称之为“强力”(strong force
在风暴中,底层的云积聚了大量电子而顶端的云失去电子;最后,一道闪电划破长空,使这一切又回到平衡。闪电是大量电子从一端快速地移动到另一端所形成的。
观察到的放电过程是电子流击穿的轨迹,不过这里提到的是云内放电,称为云闪。而一般形成自然灾害的叫地闪,由云底向地面放电。
11 门
在遥远的未来,关于20世纪的早期计算机史早已成为人们印象中模糊的记忆
那时很可能有些人会认为“logic gates”(逻辑门)装置是以著名的微软公司创始人的名字来命名的[插图]。
我想要一只公猫,已绝育的,白色或褐色都可以;或者一只母猫,已绝育的,除了白色任何颜色都可以;或者,只要是一只黑猫就行。
这样的电路有时被称为网络(network),而如今这个词更多地被用来描述计算机之间的连接,而不仅指多个开关的集合。
当两个开关串联的时候,要同时闭合它们,电流才能通过;当两个开关并联的时候,闭合其中任何一个都可以使电路连通。但是没有人像香农那样能清晰严谨地阐述:电子工程师可以运用布尔代数的所有工具去设计开关电路。
12 二进制加法器
原来加法计算就是计算机要做的唯一工作。如果我们可以造出加法器,同样地,就可以利用加法来实现减法、乘法和除法,计算按揭付款,引导火箭飞到火星、下棋,以及填写我们的话费账单。
你不能使用键盘来给出需要相加的两个数,相反所要用到的是一排开关。计算结果是通过一排灯泡来显示的,而非以数字的形式来显示。
14 反馈与触发器
如此一来,电路又一次连通了。从整个过程来看:开关一旦闭合,金属簧片就会上下跳动——电路也会随之连通或断开——声音也就会随之发出。
15 字节与十六进制
纵观整个电路的脉络,每8个比特流为一组,如潺潺溪流般在器件与器件之间流动。
