【王道笔记-计算机组成原理】第二章 数据的表示和运算

文章目录

  • 一、校验码
  • 二、数据的存储方式
  • 三、定点数的表示和运算
    • 1.有符号数
    • 2.C语言中的整型数据类型
    • 3.定点整数的符号扩展
    • 4.加减法
    • 5.溢出判断
    • 6.移位运算
  • 四、IEEE 754标准
  • 五、C语言中的类型转换
  • 六、浮点数的运算
  • 七、一些考察频率不高的知识点

一、校验码

  校验码是指能够发现或能够自动纠正错误的数据编码,也称检错纠错编码。校验码的原理是通过增加一些冗余码,来检验或纠错编码。
  关于码距:通常某种编码都由许多码字构成,任意两个合法码字之间最少变化的二进制位数,称为数据校验码的码距。对于码距不小于2的数据校验码,开始具有检错的能力。码距越大,检错、纠错的能力就越强,而且检错能力总是大于等于纠错能力。

  • 奇偶校验码:只能发现一位奇数位的出错情况,不能纠错。

  • 海明校验码:可以最多发现两位并纠正一位错位,使用很广泛,实际上是一种多重奇偶校验码。例题如下:

【王道笔记-计算机组成原理】第二章 数据的表示和运算_第1张图片
【王道笔记-计算机组成原理】第二章 数据的表示和运算_第2张图片

  • 循环冗余码:能发现并纠正多位错误。常用于网络层,传输大量数据。例题如下:

【王道笔记-计算机组成原理】第二章 数据的表示和运算_第3张图片

二、数据的存储方式

  • 大端方式和小端方式: 现在的计算机基本上按字节编址,但是一个数据未必是一个字节装得下的,也就是说一个数据可能要分好几个存储单元才装得下,先放低位再放高位就是小端方式,先放高位再放低位就是大端方式。
    【王道笔记-计算机组成原理】第二章 数据的表示和运算_第4张图片
  • 边界对齐: 假设存储字长为32位,可按字节、半字和字寻址。对于机器字长为32位的计算机,数据以边界对齐方式存放,半字地址一定是2的整数倍,字地址一定是4的整数倍,这样无论所取的数据是字节、半字还是字,均可一次访存取出。所存储的数据不满足上述要求时,通过填充空白字节使其符合要求。这样虽然浪费了一些存储空间,但可提高取指令和取数的速度。体现的是空间换时间的思想。
    【王道笔记-计算机组成原理】第二章 数据的表示和运算_第5张图片

三、定点数的表示和运算

1.有符号数

  • 原码:最高位表示符号位,其余的表示绝对值。0的表示有+0=00000和-0=10000。+0和-0是同一个数并不是两个数。
  • 补码:真值为整数那么补码就是原码;若真值为负数,原码的符号位不变其余的取反,并且最低位+1,得到补码。0的表示是唯一的,尽管原码的0不唯一,求补码时低位+1的操作反而使得+0和-0相同了。另外,整数补码表示的范围是-2n—2n-1,相比原码它的下界多1。
  • 反码:和补码有一点点像但不同,如果真值是正数,反码就是原码;如果真值是负数,除符号位之外其余的取反。0的表示不唯一,因为原码0不唯一。
  • 移码:在原码的基础上加上一个偏置值就得到了移码,至于偏置值,比如一共有8位,则偏置值为270的表示是唯一的。

2.C语言中的整型数据类型

  • 有符号数和无符号数的转换: 在计算机中,同样的数值,对于有符号数以补码形式记录真值,对于无符号数以原码形式记录真值。
  • 不同字长整数之间的转换: 长类型—>短类型,高位截肢;短类型—>长类型,高位补符号位数值。

3.定点整数的符号扩展

  需要注意的是高位添0还是1的问题,如下:

  • 正数补0
  • 负数:原码补0,反码、补码补1。

4.加减法

  • 原码加减法:

  加法规则∶先判符号位,若相同,则绝对值相加,结果符号位不变;若不同,则做减法,绝对值大的数减去绝对值小的数,结果符号位与绝对值大的数相同。
  减法规则∶两个原码表示的数相减,首先将减数(后面那个数)符号取反,然后将被减数(前面那个数)与符号取反后的减数按原码加法进行运算。
  注意∶运算时注意机器字长,当左边位出现溢出时,将溢出位丢掉。

  • 补码加减法(实现简单,计算机普遍使用):

  基本原理:若做加法,则两数的补码直接相加;若做减法,则将被减数与减数的机器负数相加。
  两个操作数均由补码表示;符号位与数值位按同样规则一起参与运算,符号位运算产生的进位要丢掉,结果的符号位由运算得出。

5.溢出判断

  溢出是指运算结果超过了数的表示范围。通常,称大于机器所能表示的最大正数为上溢,小于机器所能表示的最小负数为下溢。只有两个符号相同的数相加或符号不同的数相减才可能发生溢出。

采用一位符号: 由于减法运算在机器中是用加法器实现的,因此无论是加法还是减法,只要参加操作的两个数符号相同,结果又与原操作数符号不同,则表示结果溢出。
双符号位法/模4补码: 运算结果的两个符号位相同,表示未溢出;运算结果的两个符号位不同,表示溢出,此时最高位符号位代表真正的符号。
【王道笔记-计算机组成原理】第二章 数据的表示和运算_第6张图片

6.移位运算

  • 算术移位
    【王道笔记-计算机组成原理】第二章 数据的表示和运算_第7张图片

  • 逻辑移位
    左移、右移都添0。

  • 循环移位
    【王道笔记-计算机组成原理】第二章 数据的表示和运算_第8张图片

四、IEEE 754标准

【王道笔记-计算机组成原理】第二章 数据的表示和运算_第9张图片
【王道笔记-计算机组成原理】第二章 数据的表示和运算_第10张图片
  对于规格化的二进制浮点数,数值的最高位总是"1",为了能使尾数多表示一位有效位,将这个"1"隐含,因此尾数数值实际上是 24 位。隐含的"1"是一位整数。临时浮点数又称扩展精度浮点数,无隐含位。
  注意:“1”隐含后尾数不进行二次规格化。

【王道笔记-计算机组成原理】第二章 数据的表示和运算_第11张图片
  上面两种格式,阶码最大值分别为127和1023。
  注意:阶码机器数全为1,用来表示无穷大。阶码机器数全为0,用来表示此数值为0。

五、C语言中的类型转换

  C语言中,float型对应单精度浮点数,double型对应于双精度浮点数,long double对应于扩展双精度浮点数(但不同机器可能不同)。

  • 强制类型转换:在等式赋值和判断中出现,可能会有范围、精度的损失。

  • 隐式转换:转换过程无范围和精度损失

  char(1bit)——>int(4bit)——>long(8bit)——>float(4bit)——>double(8bit)

其他情况可能有损失:
  总长度变小,可能会溢出;总长度一样,但有效位数变少,需要舍入,导致精度损失。

六、浮点数的运算

  阶码和尾数要分开进行,一律采用补码形式。

  • ①对阶:小阶向大阶看齐,通过尾数不断算术右移同时增加阶数来实现升阶,直到阶数相等为止。由于有效数位可能会变少,所以可能会影响浮点数的精度。
  • ②尾数求和:补码加减
  • ③规格化:通过左规和右规(解决溢出),来保证浮点数的符号位和小数点第一位不同(因为是采用的补码形式)。
  • ④舍入:可能出现在对阶和右规的时候。因为最低有效位可能会往右移直到需要舍弃,此时,这一位的前一位需要舍入。分为0舍1入(舍弃的最高位为1则末位为1,否则为0)、末位恒置1。舍入是浮点数才有的概念,定点数没有。
  • ⑤溢出判断: 尾数溢出未必结果就溢出,此时应当右规,若右规之后阶码溢出则结果溢出。

注意
  对阶不会引起阶码上溢,但右规可能;
  尾数舍入可能引起阶码上溢,尾数溢出结果不一定溢出;
  左规时可能引起阶码下溢。

七、一些考察频率不高的知识点

1.为什么计算机采用二进制?

【王道笔记-计算机组成原理】第二章 数据的表示和运算_第12张图片

2.进制数之间的转换

  所有的其他进制数都可以用十进制表示,但反过来未必成立,比如不是所有的十进制小数都可以用二进制表示。

  • 任意进制转换成十进制:按权展开相加法
  • 十进制转换成任意进制:整数部分用除基取余法,小数部分用乘基取余法,从小数点处往两边。

3.BCD码

  二进制编码的十进制数通常采用四位二进制数来表示一位十进制数中的0~9这10个数码。这种编码方法使二进制数和十进制数之间的转换得以快速进行。

  • 8421码(最常用):从左到右每一位权值分别为8、4、2、1,当结果落到10-15也就是(1010)2-(1111)2之间时,需要加上6也就是(0110)2,并向高位进位。
  • 余三码:在8421码的基础上加上3也就是(0011)2
  • 2421码:四位权值从左到右是2、4、2、1。

4.英文字符编码ASCII

  共有128个字符,每个字符用7位编码占用一个字节(所以最高位也就是第8位为0),0~ 31 是控制字符,32是空格,33~126是可打印字符,127是DEL。

5.汉字字符编码GB

  汉字的编码分为输入编码、汉字内码、汉字字形码三种。一般用两字节表示一个汉字。

  • 输入编码:就是用于用户输入的编码方式,也就是拼音编码。

区位码:把汉字放在94*94的格子里,行号叫区码,列叫位码。
国标码=(区位码)16+2020H 2020H也就是32

  • 汉字内码:在计算机中编码的汉字。

汉字内码=(国标码)16+8080H
国标码两个字节的最高位都是0,因为每个字节只用了前7位来表示,而ASCII码的每个字节的最高位也是1,为了区分中英文,将国标码的两个字节的最高位都改为1,就成了汉字内码。也就是加上8080H。

  • 汉字字形码:也就是汉字的输出形式。

你可能感兴趣的:(计算机组成原理)