计算机组成原理
二、数据的表示与运算
计算机中常用的数据表示格式:定点格式和浮点格式
定点格式容许的数值范围小,但要求的处理硬件简单
浮点格式容许的数值范围大,但要求的处理硬件复杂
数据范围是指一种类型的数据能表示的最大值和最小值
数据精度通常指实数所能表示的有效数字的位数
BCD码:
1.原码表示法
原码就是数值的真值(绝对值)前面加上一个符号位(正数0、负数1)
0在原码中占了2个编码
负数原码形式上大于正数的原码
优点:简单易懂,与真值转换容易,实现乘除方便
缺点:0的表示有2种,加减法运算复杂
2.补码表示法
补码的定义:[X]补=M+X (Mod M)
正数的补码等于其本身
负数的补码等于模与该数的绝对值之差
负数用补码表示时,可以把减法转化为加法
负数原码转补码:符号位不变,数值位各位取反,末位加一
补码的性质:
(1)几个特殊数值的补码表示:
0的补码表示只有一种形式
-1(小数)的补码表示:1.0…0
-2^n(整数)的补码表示: 1.0…0
3.反码表示法
二进制各位数码0变为1,1变为0
- 对于0,有[+0]反和[-0]反之分
- 纯小数的反码不能表示为-1
- 纯整数的反码不能表示为-2^n
4.移码表示法
补码表示很难直接判断其真值大小
移码的模比补码的模在指数上少1
移码中,“0”的表示是唯一的
在移码中,符号位与原码、反码、补码相反
补码加法
负数用补码表示后,可以和正数一样来处理
当需要减去一个数x时,可以用加上x对应的负数的补码[-x]补来代替
补码运算的基本规则:
(1)运算的各个操作数均用补码表示,运算结果仍是补码
(2)符号位与数值位一样参加运算
(3)若求和,则将两补码数直接相加,得到两数之和的补码;若求差,则将减数变补(由[y]补求[-y]补),然后与被减数相加,得到两数之差的补码
(4)补码是对确定的模而言,若运算结果超过模(有从符号位上产生的进位),则将模自动丢掉
同号两数相加,异号两数相减可能发生溢出
为了判断“溢出”是否发生,可采用两种检测的方法。第一种方法是采用双符号位法
双符号位法又称变形补码,符号位有两位用“00”表示正,“11”表示负
- 两个符号位都看作数码一样参加运算
- 两数进行以4为模的加法,即最高符号位上产生的进位要丢掉
如果两个数相加后,其结果的符号位出现“00”和“11”则没有溢出,出现”01“或”10“两种组合时,表示发生溢出(可用异或门实现)
第二种溢出检测方法是采用单符号位法
当最高数值位产生进位而符号位无进位时,产生上溢;当最高有效位无进位而符号位有进位时,产生下溢
符号位与最高数值位都有进位或都无进位则无溢出,若只有一个有进位则发生溢出(可用异或门实现)
基本的二进制加法/减法器
异或:和0异或->不变,和1异或->取反
M=1时相当于各位取反,末位加一
溢出检测:单符号位法(符号位和最高数值位进位是否相同)
原码一位乘法
乘除法可以用原码实现
加减运算一定是补码
原码阵列乘法器
原码除法运算原理
恢复余数法
除数右移容易出错,余数左移不易出错
不恢复余数法(加减交替法)
浮点数的表示方法
任何一个十进制数N可以写成N=10^E*M
N=R^e*M
R——指数,是一个整数
e——基数,一般为2,8,16
M——尾数,是一个纯小数
E——阶码
IEEE754标准浮点数的表示方法
32位浮点数(单精度):低23位表示尾数 最高位表示符号 中间8位是阶码,采用移码表示指数 E=e+127
x=(-1)^S * (1.M) * 2^(E-127)
64位浮点数(双精度):低52位表示尾数 最高位表示符号 中间11位是阶码,采用移码表示指数 E=e+1023
x=(-1)^S * (1.M) * 2^(E-1023)
当阶码E为全0,且尾数M也为全0时,表示的真值x为零,结合符号位S为0或1,有正零和负零之分
当阶码E为全1,且尾数M也为全0时,表示的浮点数为无穷大,结合符号位S为0或1,有+∞和-∞之分
因此在32位浮点数的表示中,E的取值范围为0000,0001(1)到1111,1110(254),对于规格化浮点数,指数值e则为-126(1-127)到+127(254-127)
浮点数加法、减法运算
尾数右移 小阶向大阶看齐
溢出符号位为01或10——向左破坏了规格化
结果规格化:1/2≤|M|<1,尾数运算结果右移(称为向右规格化),尾数溢出并不一定是整个浮点数无法表示
舍入处理:0舍1入/恒置1法
浮点数的溢出: 负上溢、负下溢、正下溢、正上溢
先行进位思想可以使运算速度大幅度提升
位浮点数的表示中,E的取值范围为0000,0001(1)到1111,1110(254),对于规格化浮点数,指数值e则为-126(1-127)到+127(254-127)
浮点数加法、减法运算
尾数右移 小阶向大阶看齐
溢出符号位为01或10——向左破坏了规格化
结果规格化:1/2≤|M|<1,尾数运算结果右移(称为向右规格化),尾数溢出并不一定是整个浮点数无法表示
舍入处理:0舍1入/恒置1法
浮点数的溢出: 负上溢、负下溢、正下溢、正上溢