数值运算
一、定点加减运算
补码加减运算
- 两个基本关系式:
- [x + y]补 = [x]补 + [y]补 (mod M)
- [x - y]补 = [x]补 + [-y]补 (mod M)
- 求补码:由[y]补 求 [-y]补 的方法:将[y]补 连同符号位一起求反加1
- 正数时,补码和原码相同
- 负数时,对原码除符号位外求反加1
- 运算规则:
- 参加运算的操作数用补码表示
- 符号位参加运算
- 运算结果以补码表示
- 加运算:两数直接相加;减运算:将减数连同符号位一起求反加1,再与被减数相加
反码加减运算
- 规则
- 参加运算的操作数用反码表示
- 符号位参加运算
- 加运算:两数直接相加;减运算:将减数连同符号位一起求反与被减数相加
- 如果符号位产生进位,则在末位加1,即循环进位
- 运算结果为反码表示
二、溢出检测
1. 一个符号位判断
规则:当两个同号数相加,若所得结果符号与两数符号不同,则表明溢出
2. 最高有效位的进位判断
-
方法:
两个正数相加,最高有效位有进位,符号位无进位,表明运算结果发生溢出
两个负数相加,最高有效位无进位,符号位有进位,表明运算结果发生溢出
| | 正数 + 正数 | 负数 + 负数 |
| ---------- | ----------- | ----------- |
| 最高有效位 | 有 | 无 |
| 符号位 | 无 | 有 |
| 是否溢出 | √ | √ |
变形补码(双符号位)判断溢出
正数:两个符号位均为0;00.x1x2...xn
负数:两个符号位均为1;11.x1x2...xn
- 溢出判断:两数相加,结果符号位为00、11,表示没溢出;结果符号位为01表示正溢出,为10表示负溢出。
三、移位
- 按操作性质分类:逻辑移位、循环移位、算术移位
逻辑移位 | 循环移位 | 算术移位 |
---|---|---|
只有数码位置的变化,而无数量的变化 | 寄存器两端触发器有移位通路,形成闭合的移位环路 | 数的符号不变,而数值发生变化 |
左移:低位补0 右移:高位补0 |
左移1位:最高位移至最低位 右移1位:最低位移至最高位 |
左移一位:使数值扩大一倍(乘以2) 右移一位:使数值缩小一倍(乘以1/2) |
四、浮点运算
加减运算步骤
设浮点数: x = 2Ex * M x、y = 2Ey * My (My、Mx:y、x的尾数;Ex、Ey:x、y的阶码)
1、对阶
- 阶码:反映数的小数点位置
- 对阶:使小数点的位置对齐
- (1):求阶差;(2)保留大阶:小阶向大阶对齐;(3)阶码小的尾数向右移位,每右移一位阶码加1,直至阶差为0
2、求和 / 差
3、规格化
- 左规:
- 条件:运算后结果尾数的符号位与尾数第一位相等
- 尾数左移,每左移一位,阶码减1,直至尾数符号与尾数第一位不相等
- 右规:
- 条件:运算后结果尾数的两位符号位不等
- 将尾数右移一位,阶码加1
4、舍入
- (1)0舍1入:右移时被丢掉数位的最高位为0,则舍去;反之,尾数末位加1
- (2)恒置1法:只要数位被移掉,就在尾数的末位恒置“1”
5、溢出判断
- 设有阶码M位(包括一位符号位),采用补码(或移码)表示,则表示范围:-2m-1 <= E <= 2m-1 - 1
- 上溢:阶码 > 2m-1 - 1
- 下溢:阶码 < -2m-1
乘除运算
- 阶码相加
- 尾数相乘
- 规格化处理
- 舍入