编码:隐匿在计算机软硬件背后的语言

1-4章

morse编码:

  • 简单且短促的编码,被分配给字母表中使用频率较高的字母。

  • 先有morse编码,再有SOS这个编码序列。

  • 解码morse编码时,可以通过分类的方式加快解码的查询(按照数量分类),之后可以根据该分类的方式画出解码图。

布莱叶盲文:

  • 一个码字表示一个字母,字母与字母之间用一小块空白隔开,单词之间用大块空白隔开
  • 二级布莱叶盲文(带信息压缩):用一个码字表示一个单词,或者多个字母的组合。同时包括转义字符

5-8章

电报的演进:

  1. 电报由发送器和接收器组成,构成一个回路,发送器通过开关控制,接收器由电磁铁控制一只钢笔,通过笔的弹起和落下,在纸上画出点和划。
  2. 发现没有必要画在纸上,通过听声音就足够了,弹起和落下碰撞其他物体就能发出声音。这就是电视上看到的电报机的工作原理,通过“滴滴嗒嗒”的声音传递信息

继电器:本质是一个开关,但这个开关的闭合和断开是由电流来控制的

表示较大的数字的时候,为什么要加逗号?让阅读的人马上能知道表示的意思,而不是先判断有多少位。给出二进制表示的时候,通过符号分隔对阅读也有好处。

9-10章

条形码是一串二进制数,黑色是1,白色是0,根据黑色/白色的宽度确定连续1/0的个数。它由一个数字系统符、编码、模校验数组成。编码部分有左、中、右三条护线,左边护线帮助扫描仪定位,中间护线用于校验、右边护线用于实现反向扫描。在左中和中右之间有多组编码,两个垂直条纹代表了一组编码,一组编码包括7个比特位,对应一个数字,7个比特位可以实现奇偶校验。左中之间的编码以0开头1结尾,中右之间的编码以1开头0结尾,左中之间的编码是中右之间编码的反码。

物品的价格不是在编码中,而是编码与价格有对应关系,通过检索得到的。

11-12章

与门、或门、反向门可以通过继电器实现,与非门(与门+反向器),或非门(或门+反向器),缓冲器(用继电器放大信号)。与非门的等价形式是带两个反向输入的或门,或非门的等价形式是带两个反向输入的与门,可以用德摩根定律推出。

2-4译码器:输入2个二进制位,各种组合表示4个不同的值

半加器:2个二进制数的同一位相加,和的结果可用异或门实现,进位结果可用与门实现

全加器:2个二进制数的同一位相加时,由于进位的存在,需要对3个二进制数进行加法计算。可通过2个半加器和一个或门连接而成

8个全加器可实现8位加法器,2个8位加法器级联可得到16位加法器

13章

为什么要有反码?

考虑十进制减法,比如253-176,直接做的话需要借位,可以通过先加后减的方式实现无需借位。原式转化为253-176+999+1-1000,先做999-176,再做剩下的。如果是176-253,这样转化后还是需要借位,可以转化为176-253+999-999,先做999-253,再加上176,最后让999-前面的结果,加上负号就是最终的结果。

对于二进制减法,比如把上面的式子转化为二进制减法,可以转化为11111101-10110000+11111111+1-100000000,其中11111111-10110000的结果就是对10110000取反。如果是176-253,也是类似的思路。反码就是为了服务无符号减法

为什么要有补码?

补码是一个循环的排列,比如我们要表示-500~499之间的数,可以用0~1000来表示,而无需引入负号。排列为500, 501,..., 998, 999, 000, 001,..., 498, 499。其中500代表-500,501代表-499,999代表-1,999+1后将溢出位舍去变为0。

三位负数转化为10的补码,只需要用999减去它再加上1。再用999减去结果后加上1,可得到负数对应的正数。

对于二进制来说,负数转化为2的补码,即用最大值减去它,而这等价于它的反码,然后结果加上1,这就是补码=反码+1的原因。

8位二进制补码排列:10000000, 10000001, ..., 11111111, 00000000,..., 01111110, 01111111。

14章

振荡器:输入取反作为输出,同时输出再次作为输入。可以用继电器实现,与继电器相关的金属簧片作为开关,簧片不断地跳动导致电路随之连通或断开。

触发器:可以保持信息,即“记住”某些信息。

  • R-S触发器,可以记住哪个输入端的最终状态是1。
  • 电平触发的D型锁存器(也称为1位存储器),利用时钟指示什么时候保存数据。
  • 边沿触发器:时钟从0跳变到1的瞬间,数据端的输入会影响到边沿触发器的输出。边沿触发的D型触发器可由两级R-S触发器构成。

把边沿触发器串联起来可以实现计数器,因为一个边沿触发器的输出频率是输入频率的二分之一,通过将三个边沿触发器串联可实现计数16。还有更先进的计数器是并行(同步)计数器,它的所有输出是在同一个时刻改变的。

16章

在RAM中,地址是按照字节划分的。计算机指令包括操作码、操作地址。一般操作码后面跟着操作地址(Halt操作码表示停止,因此后面不跟操作地址),通过操作地址找到操作数。

机器语言是能够被处理响应的操作码(比如Load指令的代码是10h)。

汇编语言是全数字的机器语言和指令的文字描述的一种结合体(Load指令记为LOD,使用方式为LOD A, [1005h],表示把1005h地址的字节加载到累加器中)。汇编指的是将汇编语句转换成对应的机器语言。

18章

操作系统是32位,表示处理器数据通路宽度只有32位,每次做加、减运算时,它只能处理32位二进制数。如果二进制数是64位,那么需要分成高字节和低字节两部分,再进行操作。

21-25章

计算机上有多个电路板,电路板之间通过总线(bus)通信。可以认为总线是数字信号的集合,包括地址信号、数据输入信号、数据输出信号、控制信号。

直接存储器访问(Direct Memory Access,DMA)。通常情况下,所有读写内存的操作都是由CPU来完成的,但采用了DMA后,其他设备可以不通过CPU而获得总线的控制权,进而直接对内存进行读写。

二进制文件占用空间比文本文件占用空间少的原因:假设要保存100这个数,在二进制文件中保存为100对应的二进制,一个字节就够了;而在文本文件中保存为1、0、0这三个ASCII对应的二进制,需要三个字节。

定点数:小数点的位置总是在数的某个特定位置,比如位于两位小数之前。如果程序用到的数字不会大到超过预定的存储空间,并且这些数的小数位不会很多,那么使用定点数是一个很好的选择。可以用于精确的小数计算。

浮点数:通过使用指数使得小数点的位置不固定的。分为4个字节的单精度和8个字节的双精度格式。

  • 单精度:【s=1位符号位】+【e=8位指数】+【f=23位有效数】。因为规范化的有效数的小数点左边有且仅有一个1,因此在IEEE浮点数标准中没有为这一位分配存储空间,23位存储的是有效数的小数部分。因此精度是24位。8位指数部分的取值范围是0~255,称为偏移指数,需要减去偏移量127。

    如果e的取值范围是1~254,则对应的小数为 \((-1)^s * 1.f * 2^{(e-127)}\)

    如果\(e=0\)\(f=0\),则该数为0。

    如果\(e=0\)\(f\neq0\),则该数是合法的,但不是规范化的。这类数可以表示为\((-1)^s * 0.f * 2^{-127}\)

    如果\(e=255\)\(f=0\),则该数为无穷大或者无穷小,取决于符号位s的值。

    如果\(e=255\)\(f\neq0\),则该数被解释为“不是一个数”(NaN),用来表示未知的数或非法操作的结果。

    单精度浮点数的精度为 \(\frac{1}{2^{24}} = \frac{1}{16777216}\) ,这意味着16777216和16777217将表示成同一个数,且处于这两数之间的所有数都将被表示为同一个数。

  • 双精度:【s=1位符号位】+【e=11位指数】+【f=52位有效数】。如果e的取值范围是1~2046,则对应的小数为 \((-1)^s * 1.f * 2^{(e-1023)}\)。其他情况和单精度的规则相同。精度为\(\frac{1}{2^{53}} = \frac{1}{9007199254740992}\)

无损压缩和有损压缩的区别:无损压缩指压缩过程可逆,从压缩文件中恢复原文件;有损压缩过程是不可逆的,在压缩过程中丢弃了部分原始数据。

posted @ 2021-12-10 23:34  sjmuvx  阅读(923)  评论(0编辑  收藏  举报