《编码的奥秘》书籍阅读总结

第一次阅读时间:2024.4.24 星期三 天气晴

前几章主要介绍了如何使用编码传递信息。

1.常见编码介绍

1.摩尔斯电码

比如摩尔斯电码,用滴答即点和划,来表示信息并进行传递。

注意:在设计时特地把出现频率较高的单词设计的更短一点。比如26个字母中出现频率最高的E的摩尔斯电码就是用一个点来表示。摩尔斯电码用6位进行表示,一共可以表示出2+4+8+16+32+64 = 126位字符。

 注意其实摩尔斯电码和哈夫曼树虽然不一样,但是有相通之处

哈夫曼树主要用于数据压缩,后面的文章也许会介绍,现在我们只了解原理。

哈夫曼树将出现频率高的字符用较短的编码进行表示,从而实现数据的压缩

摩尔斯电码将出现频率高的字符用较短的编码表示,从而实现传递信息的效率更高。

两者原理上面有相通之处,但是很遗憾,两者并无直接关系,摩尔斯电码出现的时间比哈夫曼树早了一个多世纪。 

2.布莱叶盲文

布莱叶盲文,用凸起的点和平滑的点来进行区分,其实也是一种二元编码(就是只有两种状态来进行区分),也是用6位点的凹凸情况来进行区分,但是布莱叶盲文只能表示64位。

比较大的点表示凸点,小的表示凹点,用凹凸两种状态进行区分。 

布莱叶盲文中标识26个字母后仍存在多的字符,所以有些字符被用来作为转义字符,用转义字符来表示10个数字。

 所以盲人能通过触摸凹凸不平的盲文书籍进行阅读。

3.两者的异同点

两种都是通过6位二元编码实现数据的传递。

两者数与数之间都是通过间隔进行区分的,不然无法区分。

但是摩尔斯编码可以表示的数更多,因为有些数是通过一位两位进行表示,但是布莱叶盲文每个数都是通过6位进行表示。所以表示的数更少。

但是摩尔斯编码里面很多的编码是没有意义的,因为没有给这些编码赋予意义,所以只能用来判断是否错误。当出现的编码是没有意义的编码就表明发生了错误。

而且摩尔斯编码是能区分数字,但是不能区分字母的大小写。但是布莱叶盲文中是可以区分数字,和字母大小写的。(这一点也说明一些转义字符能够让一些编码实现复用,从而增大可以表达的范围)

所以,这两种编码告诉我们可以用两种状态来表示信息,那么我们也可以用0和1,电路的开关,高电平和低电平这样的两种状态来进行表示信息。所以也可以用二进制的0和1来表示摩尔斯编码和布莱叶盲文(只是单纯的用来表示)

2.逻辑和开关

开关有两种状态,开和关。所以我们可以用开关的组合去实现各种逻辑。但是去实现逻辑,开关显然不如继电器好用。因为继电器可以被其他继电器控制,但是开关只能用手指控制,所以继电器可以实现更为复杂的逻辑功能。

注意:输入电压是控制电压,只是单纯用来控制金属弹片的开关,只有金属弹片连接的电压才是用来输出的。注意金属弹片也要连上电压

如图,一个简单的继电器,当电流进入输入端,电磁铁被触发,将上面的金属弹片吸下来,电路就接通了,输出端就有电压存在。上面那个就是是,输入true输出也是true;下面这个是非,输入true输出就是false;通过这两个是与非来实现一系列的逻辑判断。

一个继电器的输出可以是另外一个继电器的输入,如上图所示,当第一个继电器被触发,第一个继电器的输出电压给第二个继电器的输入,使得灯被点亮。

通过将继电器互相连接的方式,是构造逻辑门的关键。 

1.与门(AND)

用一个继电器的输出来代替上面金属弹片连接的电压,这样就构成一个AND电路

这样,只有两个继电器同时触发才能实现灯泡点亮。这就是AND的逻辑操作, 也叫做与门。

注意无论哪种逻辑电路,输出都可以当做其他逻辑电路的输入。 

2.或门 (OR)

3.非

又叫做反向器,上面介绍时已经说明了反向器的实现

就是输出和输入相反。还有与非门(NAND),或非门(NOR)。于是一共有四种逻辑(因为非只要一个输入就行了,才能和或和与组合。而或和与都需要两个输入,所以无法组合) 加上一个反向器。

4.异或(XOR)

逻辑就是两个输入的二进制数不相同时返回1,两个数相同时返回0

实现用非与和或门实现

 

 3.二进制加法机

两个二进制数相加有三种结果,0,1,10(这个1是进位的意思) 。我们将求和和进位分成两个部分来进行考虑。

就是两个二进制数相加的情况分成行和列来求。 这样的话我们可以把“和”看作是异或门的结果,把“进位”看作是与门的结果

通过异或门和与门的结合,使得异或门输出和的结果,0或者1,称为Sum Out,与门输出进位的结果也是0或1,称为Carry Out。于是将这个结构封装起来,只需知道接口输入输出就行了,叫做半加器。这个半加器只能实现两个二进制数的加法,但是没有考虑到前面计算的可能出现的进位问题。

于是将半加器和该进位的数再进行一次半加实现这个目的

这个地方注意一点就是Carry Out那个或门,两个输入不可能同时为1,所以才能用或门。

然后将这个部分全部封装起来就实现了全加器。 然后将这个全加器输出的Carry Out传给下一位的全加器实现任意二进制数相加进位的功能。八个全加器连在一起就实现了八位二进制数的相加,十六位加法器可以由两个八位全加器连接而成(一个加最低的八位,一个加最高的八位)

到这里,我们大概明白了计算机进行二进制加法运算的过程。现在的计算机进行二进制加法运算操作也基本是这样的,但是现在计算机加法操作更快(用了不同的加法电路),而且注意现在已经不用继电器了,现在用的是晶体管,但是使用逻辑是差不多的。 

计算机体系结构中最重要的思想我认为一个是抽象,将一个看起来无法解决的问题转化为可以解决的问题;另一个是封装,使得在实现上层架构时无需花费太多心思在底层细节上面。

4.二进制减法的计算

在计算机中加法是通过进位实现的,我们前面已经实现八进制加法运算,但是减法的实现和加法也不一样,我们的减法是通过借位实现的,但是计算机又不会借位。为了解决这个问题,计算机提出了原码,反码,补码,移码等概念,通过将减法转化成加法来实现,下面来看看。

原码:就是一个数的二进制表示,最高位为符号位,0为正,1为负,绝对值相同的数二进制表示的数值位也相同。

反码:正数的反码和原码是一样的,负数除了符号位直接按位取反。

补码:正数的补码和原码是一样的,但是负数的补码为负数的反码加一

移码:无论正负,在补码的基础上符号位取反就行。

注意:我们一般计算二进制减法都是转化为两个二进制的补码去进行计算的,比如

124 - 127这个我先转化成加法 124+(-127)

注意一点:正数的补码和原码相等,正数的相反数的补码等于正数原码所有位按位取反再加一(包括符号位),而相反数的补码回到原来的数只需要相同的操作,所有位取反后加一

比如125是01111101,那么-125的补码就是取反加一 10000011。

到这里我们已经知道怎么求一个负数的补码了,将两个数的补码进行加法操作(包括符号位在内),溢出的部分舍去,然后结果为正就得出结果,如果结果为负就所有位取反加一。

一般来说,如果两个操作数符号相同,但是结果符号与操作数不同,这种加法一般发生了溢出,一般视作无效的加法。

   但是有时候有些二进制数无法区分数是有符号的还是无符号的,就是最高位是数据位还是符号位,只能看情况而定了。

5.反馈和触发器

我们以这个为例,可以知道这个电路可以记住最近的状态,就是0和1,这个表示电路可以锁住一位数据并保存到将来使用,可以通过这个去构造八位数据储存器。但是我们不是研究电路的,所以不必考虑如何去实现各种电路的搭建,所以在这里就是简单介绍一下大概原理即可。

还是得注意一点:我们画出来的电路和继电器的输出作为输入,这些都是控制信号,真正的供电的电压是内部与金属弹片相连的电压。如果真正供电的电压消失,灯泡是不可能能亮的。

6.后面章节

后面章节主要涉及硬件和一些历史的介绍就暂时不看了,前面几章主要让我们对计算机底层CPU中的ALU(逻辑运算单元)的实现有了一定的了解。等对计算机底层有更深的了解,再从头来阅读一遍。

  • 45
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值