1、原码
定义
①小数原码
![](/icons/43551de.gif)
定义
[X]原 =
X
0≤X <1
1- X
-1 < X ≤ 0
例如: X=+0.1011 , [X]原= 01011
X=-0.1011 [X]原= 11011
②整数原码
![](/icons/43551de.gif)
定义
[X]原 =
X
0≤X <2n
2
n-X
- 2n < X ≤ 0
2、补码
定义
①小数补码
![](/icons/43551de.gif)
定义
[X]补 =
X
0≤X <1
2+ X
-1 ≤ X < 0
例如: X=+0.1011, [X]
补= 01011
X=-0.1011, [X]
补= 10101
②整数补码
![](/icons/43551de.gif)
定义
[X]补 =
X
0≤X <2
n
2
n+1+X
- 2
n ≤ X < 0
3、反码
定义
①小数反码
![](/icons/43551de.gif)
定义
[X]反 =
X
0≤X <1
2-2
n-1-X
-1 < X ≤ 0
例如: X=+0.1011 [X]
反= 01011
X=-0.1011 [X]
反= 10100
②整数反码
![](/icons/43551de.gif)
定义
[X]反 =
X
0≤X <2
n
2
n+1-1-X
- 2
n < X ≤ 0
4.移码:移码只用于表示浮点数
阶码
所以只用于整数
①移码
![](/icons/43551de.gif)
定义:设由1位符号位和n位数值位组成
![](/icons/43551de.gif)
阶码
![](/icons/43551dou.gif)
则 [X]
移=2
n + X -2
n≤X ≤ 2
n例如: X=+1011 [X]
移=11011 符号位“1”表示正号
X=-1011 [X]
移=00101 符号位“0”表示负号
②移码和补码
![](/icons/43551de.gif)
关系: [X]移和[X]补
![](/icons/43551de.gif)
关系是符号位互为反码
![](/icons/43551dou.gif)
例如: X=+1011 [X]
移=11011 [X]
补=01011
X=-1011 [X]
移=00101 [X]
补=10101
③移码运算应注意
![](/icons/43551de.gif)
问题:
◎对移码运算
![](/icons/43551de.gif)
结果需要加以修正
![](/icons/43551dou.gif)
修正量为2
n ![](/icons/43551dou.gif)
即对结果
![](/icons/43551de.gif)
符号位取反后才是移码形式
![](/icons/43551de.gif)
正确结果
![](/icons/43551dou2.gif)
◎移码表示中
![](/icons/43551dou.gif)
0有唯
![](/icons/43551yi.gif)
![](/icons/43551de.gif)
编码——1000…00
![](/icons/43551dou.gif)
当出现000…00时(表示-2
n)
![](/icons/43551dou.gif)
属于浮点数下溢
2、补码加、减运算规则
1、运算规则
[X+Y]
补= [X]
补+ [Y]
补[X-Y]
补= [X]
补+ [-Y]
补
若已知[Y]
补![](/icons/43551dou.gif)
求[-Y]
补![](/icons/43551de.gif)
思路方法是:将[Y]
补![](/icons/43551de.gif)
各位(包括符号位)逐位取反再在最低位加1即可
![](/icons/43551dou2.gif)
例如:[Y]
补= 101101 [-Y]
补= 010011
2、溢出判断![](/icons/43551dou.gif)
般用双符号位进行判断:
符号位00 表示正数 11 表示负数
结果
![](/icons/43551de.gif)
符号位为01时
![](/icons/43551dou.gif)
称为上溢;为10时
![](/icons/43551dou.gif)
称为下溢[Page]
例题:设x=0.1101
y=-0.0111
符号位为双符号位
用补码求x+y
x-y
[x]补+[y]补=00 1101+11 1001=00 0110
[x-y]补=[x]补+[-y]补=00 1101+00 0111=01 0100
结果![](/icons/43551cuowu.gif)
正溢出
3、原码
位乘
实现:
设X=0.1101
![](/icons/43551dou.gif)
Y=-0. 1011
![](/icons/43551dou.gif)
求X*Y
解:符号位单独处理
![](/icons/43551dou.gif)
x
符+ y
符数值部分用原码进行
![](/icons/43551yi.gif)
位乘
![](/icons/43551dou.gif)
如下图所示:
高位部分积
低位部分积/乘数
介绍说明
0 0 0 0 0 0
1 0 1 1
起始情况
+) 0 0 1 1 0 1
乘数最低位为1
![](/icons/43551dou.gif)
+X
0 0 1 1 0 1
0 0 0 1 1 0
1 1 0 1
1(丢)
右移部分积和乘数
+) 0 0 1 1 0 1
乘数最低位为1
![](/icons/43551dou.gif)
+X
0 1 0 0 1 1
0 0 1 0 0 1
1 1 1 0
1(丢)
右移部分积和乘数
+) 0 0 0 0 0 0
乘数最低位为0
![](/icons/43551dou.gif)
+0
0 0 1 0 0 1
0 0 0 1 0 0
1 1 1 1
0(丢)
右移部分积和乘数
+) 0 0 1 1 0 1
乘数最低位为1
![](/icons/43551dou.gif)
+X
0 1 0 0 0 1
0 0 1 0 0 0
1 1 1 1
1(丢)
右移部分积和乘数
4、原码
位除
实现:
般用不恢复余数法(加减交替法)
部分积
低位部分积 附加位
操作介绍说明
0 0 0 0 0 0
1 0 1 1
起始情况
+) 0 0 0 0 0 0
乘数最低位为1
![](/icons/43551dou.gif)
+X
0 0 0 0 0 0
0 0 0 0 0 0
1 1 0 1
1(丢)
右移部分积和乘数
+) 1 1 0 0 1 1
乘数最低位为1
![](/icons/43551dou.gif)
+X
0 1 0 0 1 1
0 0 1 0 0 1
1 1 1 0
1(丢)
右移部分积和乘数
+) 0 0 0 0 0 0
乘数最低位为0
![](/icons/43551dou.gif)
+0
0 0 1 0 0 1
0 0 0 1 0 0
1 1 1 1
0(丢)
右移部分积和乘数
+) 0 0 1 1 0 1
乘数最低位为1
![](/icons/43551dou.gif)
+X
0 1 0 0 0 1
0 0 1 0 0 0
1 1 1 1
1(丢)
右移部分积和乘数
[Page]§2.5 浮点运算和浮点运算器
、浮点数
运算规则
1、浮点加减法
运算步骤
设两个浮点数 X=Mx※2Ex Y=My※2Ey
实现X±Y要用如下5步完成:
①对阶操作:小阶向大阶看齐
②进行尾数加减运算
③规格化处理:尾数进行运算
![](/icons/43551de.gif)
结果必须变成规格化
![](/icons/43551de.gif)
浮点数
![](/icons/43551dou.gif)
对于双符号位
![](/icons/43551de.gif)
补码尾数来说
![](/icons/43551dou.gif)
就必须是
001×××…×× 或110×××…××
![](/icons/43551de.gif)
形式
若不符合上述形式要进行左规或右规处理
![](/icons/43551dou2.gif)
④舍入操作:在执行对阶或右规操作时常用“0”舍“1”入法将右移出去
![](/icons/43551de.gif)
尾数数值进行舍入
![](/icons/43551dou.gif)
以确保精度
![](/icons/43551dou2.gif)
⑤判结果
![](/icons/43551de.gif)
正确性:即检查阶码是否溢出
若阶码下溢(移码表示是00…0)
![](/icons/43551dou.gif)
要置结果为机器0;
若阶码上溢(超过了阶码表示
![](/icons/43551de.gif)
最大值)置溢出标志
![](/icons/43551dou2.gif)
例题:假定X=0 .0110011*2
11![](/icons/43551dou.gif)
Y=0.1101101*2
-10(此处
![](/icons/43551de.gif)
数均为 2进制) ?? 计算X+Y;
解:[X]
浮: 0 1 010 1100110
[Y]
浮: 0 0 110 1101101
符号位 阶码 尾数
第
![](/icons/43551yi.gif)
步:求阶差: │ΔE│=|1010-0110|=0100
第 2步:对阶:Y
![](/icons/43551de.gif)
阶码小
![](/icons/43551dou.gif)
Y
![](/icons/43551de.gif)
尾数右移4位
[Y]
浮变为 0 1 010 0000110 1101暂时保存
第 3步:尾数相加
![](/icons/43551dou.gif)
采用双符号位
![](/icons/43551de.gif)
补码运算
00 1100110
+00 0000110
00 1101100
第 4步规格化:满足规格化要求
第 5步:舍入处理
![](/icons/43551dou.gif)
采用0舍1入法处理
故最终运算结果
![](/icons/43551de.gif)
浮点数格式为: 0 1 010 1101101
![](/icons/43551dou.gif)
即X+Y=+0. 1101101*2
10
2、浮点乘除法
运算步骤
①阶码运算:阶码求和(乘法)或阶码求差(除法)
即 [Ex+Ey]移= [Ex]移+ [Ey]补
[Ex-Ey]移= [Ex]移+ [-Ey]补
②浮点数
![](/icons/43551de.gif)
尾数处理:浮点数中尾数乘除法运算结果要进行舍入处理
例题:X=0 .0110011*2
11![](/icons/43551dou.gif)
Y=0.1101101*2
-10求X※Y
解:[X]
浮: 0 1 010 1100110
[Y]
浮: 0 0 110 1101101
第
![](/icons/43551yi.gif)
步:阶码相加
[Ex+Ey]移=[Ex]移+[Ey]补=1 010+1 110=1 000
1 000为移码表示
![](/icons/43551de.gif)
0
第 2步:原码尾数相乘
![](/icons/43551de.gif)
结果为:
0 10101101101110
第 3步:规格化处理:已满足规格化要求
![](/icons/43551dou.gif)
不需左规
![](/icons/43551dou.gif)
尾数不变
![](/icons/43551dou.gif)
阶码不变
![](/icons/43551dou2.gif)
第 4步:舍入处理:按舍入规则
![](/icons/43551dou.gif)
加1进行修正
所以 X※Y= 0.1010111※2
+000