第二章-数据的表示和运算

XCurry Lv4

BCD码

8421码前9个数字都是二进制表示,若进行加法运算结果超过9,则再加上二进制的6(0110)。(有权码)
余3码:8421码+(0011),
2421码:改变权值定义

0 1 2 3 4 5 6 7 8 9
0000 0001 0010 0011 0100 1011 1100 1101 1110 1111

计算机硬件如何实现无符号整数的减法

  1. “被减数”不变,“减数”全部按位取反、末尾+1,减法变加法
  2. 从最低位开始,按位相加,并往更高位进位

有符号整数

原码

  1. 符号位“0/1”对应“正/负”,剩余的数值位表示真值的绝对值
  2. 若机器字长n+1位,带符号整数的原码表示范围
  3. 真值0有两种形式:+0和-0,[+0]=0.0000000,[-0]=0.0000000
    缺点:符号位不能参与运算,需要设计复杂的硬件电路才能处理

反码

原码符号位不变,数值位取反,从而得到反码

补码

反码的末尾加1,得到补码
原码与补码转换,原码从右往左找到第一个1,这个1左边的所有“数值位”按位取反,得到补码
补码数值位不能解读为“位权”
补码的符号位需要参与运算,补码的减法运算与无符号整数的减法运算类似,减数全部为取反、末尾加一,在进行加法
C语言中的数据在内存中为补码表示形式。
对于补码,真值0只有一种补码,最小的数位1,000……000=-

移码

补码的基础上将符号位取反。移码只能用于表示整数。
移码=真值+偏置值

定点小数

所有转换都与定点整数的各种形式转换一样。
定点小数的补码最小值为1,000……000=-1

运算电路

原码的加减运算

  • 原码的加法运算
    • 正+正:绝对值做加法,结果为正(可能溢出)
    • 负+负:绝对值做加法,结果为负(可能溢出)
    • 正+负:绝对值大的减绝对值小,符号同绝对值大的数
    • 负+正:与正+负情况类似
  • 原码的减法运算,“减数”符号取反,转变为加法
    定点整数的符号拓展:在原符号位和数值位中间添加新位,正数都填0;复数原码添0,负数反、补码添1
    定点小数的符号拓展:在原符号位和数值位后面添加新位,正数都添0;负数原、补码添0,负数反码添1

加法器

OF(Overflow Flag):溢出标志。溢出时是1,否则置0(有符号数的加减运算是否溢出)。计算方法次高位进位与最高位进位进行异或计算
SF(Sign Flag):==有符号==加减运算结果的正负性,0为正数,1为负数
ZF(Zero Flag):表示计算结果是否为0 结果为0贼ZF置1
CF(Carry Flag):==无符号==加减法是否发生进位或错位。当CF=1时,说明无符号的加减运算发生了进位或错位,也即发生了溢出。

移位运算

原码的算术移位:符号位保持不变,进队数值位进行移位。
反码的算术移位:正数的反码移位与原码移位相同,负数的反码移位规则:

  • 右移:高位补1,低位舍弃
  • 左移:低位补1,高位舍弃
    补码的算数移位:正数的补码移位与原码移位相同,负数补码最右边的1及其右边同原码。最右边的1的左边同反码
  • 右移:高位补1,低位舍弃
  • 左移:低位补0,高位舍弃
    逻辑移位:当作无符号数进行移位
    循环移位:将进位位循环移到数字末尾或者数字首部

原码乘法运算

进行n轮加法、移位

补码乘法运算

进行n轮加法、移位,最后再多来一次加法。每次移位是“补码的算数右移”,符号位参与运算,加法规则如下:

  • 辅助位-MQ中最低位=1时,ACC+
  • 辅助位-MQ中最低位=0时,ACC+0
  • 辅助位-MQ中最低位=-1时,ACC+

强制转换

无符号与有符号数:不改变数据内容,改变解释方式
长整数变短整数:高位截断,保留低位。

浮点数



阶码E反映浮点数的表示范围及小数点的实际位置;尾数M的数值部分位数n反映浮点数的精度。
左规:位数算数左移一位,阶码减一
右规:位数算数右移一位,阶码加一
用原码表示的尾数进行规格化:

  • 正数为0.1…….的形式,其最大值表示为0.11…….11;最小值表示为0.10……0,表示范围为
  • 负数为1.1……的形式,其最大值为1.10……0;最小值为1.11…1,表示范围
    用补码表示的尾数规格化
  • 正数为0.1……的形式,其最大值表示为0.11…1;最小值表示为0.10…0,表示范围为
  • 负数为1.0…..的形式,最大值表示为1.01….1;最小值表示为1.00……0,表示范围为
    阶码全为0,尾数不全为0时,表示非规格化小数
    阶码全为0,尾数全为0时,表示0
    阶码全为1,尾数全为0时,表示无穷大
    阶码全为1,尾数不全为0时,表示非数值“NaN”
    int->float:可能损失精度
    float->int:可能溢出及损失精度
  • 标题: 第二章-数据的表示和运算
  • 作者: XCurry
  • 创建于 : 2024-09-19 16:00:00
  • 更新于 : 2024-11-25 20:05:45
  • 链接: https://github.com/XYXMichael/2024/09/19/计算机组成原理/第二章-数据的表示和运算/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论