本章主要介绍参与运算的各类数据(无符号数和有符号数、定点数和浮点数等),以及它们在计算机中的算术运算方法。
6.1 无符号数和有符号数
1.码制比较
类型 | 定义 | 表示范围(n+1 位,1 位符号位) | 作用 |
---|---|---|---|
原码 | 带符号的绝对值表示 | ||
补码 | 消除减法运算 | ||
反码 | 由原码求补码或由补码求原码的中间过渡 |
2.相互转换
6.2 定点数和浮点数
1.定点数的表示
小数点按约定的方式标出,小数点位于
- 符号位和第一数值位之间:纯小数
- 数值位之后:纯整数
原码、补码、反码在定点数中的表示范围:
定点机 | 小数定点机 | 整数定点机 |
---|---|---|
原码 | -(1-2-n)~+(1-2-n) | -(2n-1)~+(2n-1) |
补码 | -1~+(1-2-n) | -2n~+(2n-1) |
反码 | -(1-2-n)~+(1-2-n) | -(2n-1)~+(2n-1) |
2.浮点数的表示
1.浮点数的表示形式
各参数的意义如下:
Sf
: 浮点数的符号位n
:尾数的位数,反映浮点数的精度m
:阶码的位数,反映浮点数的表示范围jf和m
:共同表示小数点的实际位置,这条没什么用
机器零:
- 当浮点数尾数为 0 时,不论阶码为何值,按机器零处理
- 当浮点数阶码等于或小于所能表示的最小值时,不论尾数为何值,按机器零处理
2.浮点数的表示范围
练习:设机器字长为 24 位,与表示正负 3 万的十进制数,试问在保证数的最大精度的前提下,除阶符、数符各取 1 位外,阶码、尾数各取几位?
3.浮点数的规格化表示
- 基数 r 越大,可表示的浮点数的范围越大
- 基数 r 越大,浮点数的精度降低
例 6.15
6.3 定点数运算
1.移位运算
1. 算术移位
有符号数,无论是正数还是负数,移位时符号位保持不变
算术移位规则:
- 正数:原码、补码、反码移位均添 0
- 负数:
- 原码:都添 0
- 补码:左移添 0,右移添 1
- 反码:都添 1
2. 逻辑移位
无符号数,移位规则:
- 逻辑左移,低位添 0,高位移丢;
- 逻辑右移,高位添 0,低位移丢.
2.加减运算
1. 加减法运算
-
减法运算可以看做被减数加上一个减数的负值,即 A -B = A + (-B)
-
因此若机器数采用补码,当求 A- B 时,只需先求[-B]补 就可按补码加法规则进行运算
-
求 [-B]补 :将[-B]补 连同符号位在内每位取反。末位 +1
-
减法运算连同符号位一起运算,符号位产生的进位直接丢弃
类型 加法 减法 整数 [A]_补+[B]_补=[A+B]_补(mod 2^{n+1}) [A-B]_补 = [A]_补 + [-B]_补(mod 2^{n+1}) 小数 [A]_补+[B]_补=[A+B]_补(mod 2) [A-B]_补 = [A]_补 + [-B]_补(mod 2)
2. 溢出判断
补码定点加减法运算判断溢出有两种方法
方法 | 溢出判断 | 硬件实现 |
---|---|---|
一位符号位 | 参加操作的两个数符号相同,而运算结果的符号与其不同 | 最高有效位的进位\bigoplus符号位的进位=1 |
两位符号位(变形补码) | 2 位符号位不同即溢出,而无论是否溢出,高位符号位代表真实符号 | 符号位产生的进位\bigoplus最高有效位产生的进位=1 |
3.乘法运算
原码乘法
1.原码一位乘和原码两位乘
原码一位乘运算规则:
2.原码两位乘
原码两位乘运算规则、
原码一位乘和原码两位乘比较
科目 | 原码一位乘 | 原码两位乘 |
---|---|---|
符号位 | x_0\bigoplus y_0 | x_0\bigoplus y_0 |
操作数 | 绝对值 | 绝对值的补码 |
移位 | 逻辑右移 | 算术右移 |
移位次数 | n | \frac{n}{2},n 为偶数 |
最多加法次数 | n | \frac{n}{2}+ 1,n 为偶数 |
补码乘法
1.补码一位乘
补码一位乘运算公式:
Booth 算法递推公式
补码乘法小结
4.除法运算
原码除法
特点:
- 上商 n + 1 次
- 第一次上商判溢出
- 移 n 次,加 n + 1 次
- 用移位的次数判断除法是否已经结束
6.4 浮点数运算
1.加减运算
步骤: 对阶、尾数求和、规格化、舍入
1.对阶
先求阶差 j_{x}-j_{y} 判断正负,然后对阶
对阶原则:小阶向大阶看齐
尾数要根据阶码的移动而移动
2.尾数求和
补码求和,没啥好说的
3.规格化
规格化数的定义:r=2, \frac{1}{2}<=|S|<1
规格化数的判断:
- 原码:无论正负,第一数值位需要为 1
- 补码:符号位和第一数值位不同
例:字长 12 位, 用定点补码规格化小数表示时,所能表示的正数范围是( )。
\frac{1}{2} ~ (1- 2^{-11} )
特例:[-\frac{1}{2}]_补 不是规格化的数,[-1]_补 是规格化的数
左规:尾数左移一位,阶码减 1,直到数符合第一数位不同为止
右规:当尾数溢出(>1)时,尾数右移一位,阶码加 1
4.舍入
在 对阶 和 右规 过程中,可能出现 尾数末位丢失 引起误差,需考虑舍入
0 舍 1 入法,恒置 “1” 法
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于