第二章-数据的表示和运算
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,减法变加法
- 从最低位开始,按位相加,并往更高位进位
有符号整数
原码
- 符号位“0/1”对应“正/负”,剩余的数值位表示真值的绝对值
- 若机器字长n+1位,带符号整数的原码表示范围
- 真值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 进行许可。