【读书笔记】《编码:隐匿在计算机软硬件背后的语言》01 逻辑与开关
【读书笔记】《编码:隐匿在计算机软硬件背后的语言》01 逻辑与开关
- 前言
- 01 逻辑与开关
前言
我是一名光学工程专业研二的学生,目前正处于找工作的阶段,根据往年师兄师姐找工作的情况,在西安这个城市不出意外我能找到的应该就是嵌入式岗位了,所以我开始想办法提升自己在这方面的知识水平,以此来应对八九月份的秋招。本科阶段我学过模电、数电、微机原理、单片机等基础课,但本科阶段懂得都懂,只要不挂科就行,所以对嵌入式这方面的知识也只停留在表面,比如问我什么是CPU、寄存器等等和计算机相关的问题,我一时半会儿还真的回答不上来。
于是,我开始学习计算机相关的知识,在机缘巧合下我读到了这本书,这本书没有晦涩难懂的专业术语,作者用丰富的想象和清晰的语言表达将计算机的发展过程和原理一步步展现在我的面前,通过通俗易懂的方式,从基础的编码概念逐步深入到计算机的软硬件原理,这让我在阅读过程中逐渐把本科阶段乃至高中物理学到的一些知识串联在一起,让我受益匪浅,所以我忍不住想记录一下里面引发我思考的精彩内容,这也算是我做的一个读书笔记,让我以后也能方便直观的回顾。
01 逻辑与开关
前几章通过摩斯电码、布莱叶盲文、继电器等实例,引入了二进制数和用继电器充当开关的概念,即二进制数1和0分别对应开关的打开和关闭的状态。这里我们就不写前几章的内容了,主要写让我觉得好玩的部分。
这一部分作者先引入了布尔代数的知识:通常用字母来表示具体的物体(类/集合),然后对这些具体的类进行逻辑运算。
举个例子:
我们可以用M代表公猫,F代表母猫,T可以代表褐色的猫,B可以代表黑猫,W代表白猫,O代表不在T、B或W集合中的其他颜色的猫,字母N来表示已被绝育的猫,字母U表示未被绝育的猫。这些字母用来表示有特定特征的猫的群体。
布尔代数中,有时用符号“∪”(并集)和“∩”(交集)来代替“+”和“×”(在概率论中我也学过)。这里我们能复习一个知识就是“或”(or)=并 (+)、“和”(and)=交(×)
显然通过 M + F = T + B + W + O = N + U = 1 M+F=T+B+W+O=N+U=1 M+F=T+B+W+O=N+U=1可以表示所有猫的集合。
特别注意的是:传统代数的交换律、结合律和分配律在布尔代数中同样成立。而且在布尔代数中,加法还可以来分配乘法,但在传统的代数中,这是不成立的:
W + ( B × F ) = ( W + B ) × ( W + F ) W+(B×F)=(W+B)×(W+F) W+(B×F)=(W+B)×(W+F)
白猫和黑色母猫的并集=白猫和黑猫的并集和白猫和母猫的并集。
如果我们去宠物店买猫,要求:“一只公猫,已绝育的,白色或褐色都可以,或者一只母猫,也要是已绝育的,除了白色任何颜色都可以;或者,只要是黑猫“就可以用以下公式表示:
( M × N × ( W + T ) ) + ( F × N × ( 1 − W ) ) + B (M×N×(W+T))+(F×N×(1-W))+B (M×N×(W+T))+(F×N×(1−W))+B
用公式表达的好处是,我们就可以做一个布尔测试了。为了避免麻烦,这里,字母可以用数字来赋值。我们只用数字0和1。数字1代表YES, True,即这只猫是符合这样的标准的。数字0表示NO, False,即这只猫不符合这种特定标准。
如果店员拿了一只未绝育的褐色公猫,替换后的公式: ( 1 × 0 × ( 0 + 1 ) ) + ( 0 × 0 × ( 1 − 0 ) ) + 0 = 0 (1×0×(0+1))+(0×0×(1-0))+0=0 (1×0×(0+1))+(0×0×(1−0))+0=0,因此这只猫不符合要求。
店员随后拿出了一只已绝育的灰色母猫,替换后的公式: ( 0 × 1 × ( 0 + 0 ) + ( 1 × 1 × ( 1 − 0 ) ) + 0 = 1 (0×1×(0+0)+(1×1×(1-0))+0=1 (0×1×(0+0)+(1×1×(1−0))+0=1,这说明这只小猫符合咱们的要求可以带回家了!
值得注意的是,我们刚刚的一系列做法把我们的抽象文字用具体的公式和数字表达出来了,但这样做每次我们还需要代入数字0和1计算最终结果,还是不够直观。
有没有什么方法可以直观展示结果呢?
这时我们突发奇想,是否可以通过连通开关和灯泡的方法来确定某类猫咪是否符合我们的标准呢?
让我们尝试设计一个帮助顾客挑选心仪猫咪的电路吧!
在初中物理课,我们学过串联电路和并联电路,我们可以说0代表“开关断开”,1代表“开关闭合”,一个灯泡有两种状态,0代表“灯泡不亮”,1代表“灯泡亮”。我们可以用真值表表示灯泡的亮灭与开关的关系。
两个开关串联相当于布尔代数中的AND运算。
两个开关并联相当于布尔代数中的OR运算。
结合上面初中的物理知识(“和”(and)=交(×)=串联、“或”(or)=并 (+)=并联),如下图所示,刚刚我们对于猫咪的要求就可以用电源、开关和灯泡来做一个电路了:
“一只公猫,已绝育的,白色或褐色都可以,或者一只母猫,也要是已绝育的,除了白色任何颜色都可以;或者,只要是黑猫” ( M × N × ( W + T ) ) + ( F × N × ( 1 − W ) ) + B (M×N×(W+T))+(F×N×(1-W))+B (M×N×(W+T))+(F×N×(1−W))+B
此时如果店员拿出一只已绝育的灰色母猫,我们只需要闭合和打开对应的开关。
灯泡被成功点亮了,表明这只猫符合顾客的全部要求。
作者在这章最后说到:“然而,在19世纪,没有人将布尔代数中的AND和OR同线路中的开关串联及并联关联到一起”,但我们居然做到了,这也太有趣了!