第 3章 运算方法与实现电路本章主要内容:
本章主要讨论各种数据类型的二进制表示以及不同数制之间的相互转换。主要介绍数据的表示方法,包括定点数表示、浮点数表示、
自定义表示方法,重点介绍浮点数表示,包括表数范围、表数精度、表数效率及浮点数的设计。简单介绍常用的校验编码。主要讲解定点数的加、减、乘、除运算及实现技术,最后讨论浮点运算方法及加法器的构成。
3.1 计算机中数据的表示与数制之间的转换
3.2 机器数的编码表示及加减运算
3.3 二进制乘除法运算
3.4 浮点数的运算方法
3.5 浮点数设计
3.6 数据校验码
3.7 高级数据表示
3.1 计算机中数据的表示与数制之间的转换
3.1.1 计算机中数据的表示方法与转换
1.数值型数据的表示表 3-1 a在不同进制中的取值进 制 取 值二进制 0 1
八进制 0 1 2 3 4 5 6 7
十进制 0 1 2 3 4 5 6 7 8 9
十六进制 0 1 2 3 4 5 6 7 8 9 A B C D E F
2.不同数制间的转换
( 1)二、八、十六进制数之间的转换
例 3-4 ( 1 011.100 1) 2=( 001 011,
100 100) 2=( 13.44) 8
例 3-5 ( 10 0101.1001) 2=( 0010
0101,1001) 2=( 25.9) 16
若将八、十六进制转换成二进制时,只要把每一位对应写成 3位,4位二进制即可。
例 3-6 ( 12.5) 8=( 001 010.101) 2=
( 1010.101) 2
例 3-7 ( 2A.3) 16=( 0010 1010.0011)
2=( 101010.011) 2
( 2)十进制数转换成二进制数
例 3-8 将( 125) 10转换成二进制数。
3.1.2 十进制数的编码与运算
1.有权码
有权码指的是表示一位十进制的二进制码的每一位有确定的权值。
例 3-10 用 BCD码求 57+14=?
例 3-10 用 BCD码求
57+14=?
首先将两数用 BCD码表示为,0101
0111+0001 0100,其相加结果如下。
0 1 0 1 0 1 1 1
+ 0 0 0 1 0 1 0 0
0 1 1 0 1 0 1 1
+ 0 1 1 0
0 1 1 1 0 0 0 1
2.无权码
无权码是指表示一个十进制数位的二进制码的每一位没有确定的权。
例 3-11 ( 36) 10+( 27) 10=( 63) 10 采用余 3码进行运算的过程为:
0 1 1 0 1 0 0 1
+ 0 1 0 1 1 0 1 0
1 1 0 0 0 0 1 1
0 0 1 1 + 0 0 1 1
1 0 0 1 0 1 1 0
3.2 机器数的编码表示及加减运算
3.2.1 机器数的编码表示
1.原码表示法
N1=+1001011,N2=?0.1011011
其原码为 [N1]原 =[+1001011]原 =01001011
[N2]原 =[?0.1011011]原 =11011011
设数 X=± 0.x1x2… xn,它的定点小数原码可定义为:
X 0≤X< 1
[X]原 =
1?X=1+|X|?1< X≤0
设数 Y=± y1y2… yn,它的定点整数原码可定义为:
Y 0≤Y< 2n
[X]原 =
2n?X=2n+|Y|?2n< Y≤0
原码小数表示的范围为,(1?2?n)到
(1?2?n)
原码整数表示的范围为,(2n?1)到
(2n?1)
2,补码表示法
( 1)补数
对应于钟表的表盘,时钟指 12点,顺时针拨 8
格,为 8点;而逆时针拨 4格,也是 8点。在以模计数的条件下它们的值是相同的。此例中 8
是?4对模 12的补数。假如以 10为模,那么 8与
4就不等价了,与?4等价的是 6,变换的条件是模数值。若以 M表示模数,则有:
M?|X|=Y (mod M)
|X|=Y (mod M)
数 Y是负数?X对模 M的补数。补数的概念来自于数学上的“同余”概念。
( 2)补码
① 正数的补码
正数的补码就是它本身,即正数的补码与原码相同。
例如:
[+0.1001]原 =0.1001
[+0.1001]补 =0.1001
② 负数的补码
负数的补码是原码对模数的补数。
例如:
[?0.1001]补 =10?0.1001=1.0111
[?10100]补
=1000000?010100=101100
X 0≤X< 1
[X]补 = 2+X=2?|X|?1≤X< 0
2n+1?|X| X> 0的整数
③ 数的补码表示与其真值之间的关系
正数 —— 即原码,符号位为 0;负数 ——
补码为原码的“取反加 1”(符号位为 1)。
3,反码表示法
反码的定义如下:
X 0≤X< 1
[X]反 =
2?2?n+X?1< X≤0
即,[X]反 =(?2-n)? 号位 +X mod(2?2?n),其中,
n为小数点后的有效位数。
4,移码表示法
当阶码由 1位符号位和 n位数据组成时,其移码的定义为:
[X]移 =2n+X?2n≤X< 2n
按此定义,则有
[X]移 +[Y]移 =2n+X+2n+Y
=2n+(2n+(X+Y))
=2n+[X+Y]移
3.2.2 定点数加减运算
当补码加减运算的结果不超出机器范围时,有以下的运算规则:
( 1)参加运算的两个操作数均用补码表示。
( 2)符号位作为数的一部分参加运算。
( 3)求差时将减数求补,用求和代替求差。
( 4)运算结果为补码。
( 5)符号位的进位为模值,应该丢掉。
1.补码加法运算
[X]补 +[Y]补 =[X+Y]补
例 3-12 已知 X=+0.10011,Y=+0.01001,求
X+Y。
解 [X]补 +[Y]补 =0.10011+0.01001
=0.11100
[X+Y]补 =[0.10011+0.01001]补 =0.11100
这里 X和 Y均为正数,得到 [X]补 +[Y]补 =[X+Y]
补,符合补码加法规律。
例 3-13 已知 X=?0.10011,Y=+0.10001,求
X+Y。
解 [X]补 =1.01101 [Y]补 =0.10001
[X]补 +[Y]补 =1.01101+0.10001
=1.11110
[X+Y]补 =[?0.10011+0.10001]补 =[?0.00010]
补 =1.11110
这里 X和 Y为一负一正,同样得到 [X]补 +[Y]补
=[X+Y]补。
2,补码的减法运算
例 3-15 已知 X=0.11001,Y=0.10011,
求 X?Y。
解 [X]补 =0.11001 [Y]补 =0.10011 则
[?Y]补 =1.01101
[X?Y]补 =[X]补 +[?Y]补
=0.11001+1.01101=10.00110
3,补码定点加减运算的实现
F S F 01 加法器
& &
=1 A &
X → F
& C
F → X
1 → F
B
Y → F Y → F
Y S Y 01 加法器
X S X 01 寄存器
图 3-1 实现加法运算的逻辑示例
3.2.3 定点数加减运算溢出的处理例 3-16
0
1 0 0 ( +4) 1 1 0 0 (?4) 1 1 0 0 (?
0 0 1 0 ( +2) + 1 1 0 1 (?3) + 0 0 1 1 ( +3
0 1 1 0 ( +6) 1 0 0 1 (?7) 1 1 1 1 (?
0
0 1 1 ( +3) 1 1 0 1 (?3)
+ 0 1 1 0 ( +6) + 1 0 1 0 (?6)
1 0 0 1 (?7) 0 1 1 1 ( +7)
溢出溢出
3.3 二进制乘除法运算
3.3.1 二进制乘法运算
1.定点数一位乘法
( 1)定点原码一位乘法
( 2)定点补码一位乘法例 3-18 X=?0.1101,Y=0.1011,计算乘积 X× Y
0,1 1 0 1
0,1 0 1 1
1 1 0 1
1 1 0 1
0 0 0 0
1 1 0 1
0,1 0 0 0 1 1 1 1
2.定点数两位乘法
( 1)原码两位乘
( 2)补码两位乘
3.3.2 二进制除法运算
1.定点原码一位除法
( 1)恢复余数法
( 2)加减交替法
2,定点补码一位除法 ( 加减交替法 )
表 3-7补码除法规则 ( [Ri]补 为余数,数值部分共 n位 )
X补,Y补符号 商 符第一步操作
R补,Y补,
符号 上 商下一步操作同号 0 减同号(够减) 1
2[Ri]补?Y
补异号(不够减) 0
2[Ri]补 +Y
补异号 1 加同号(不够减) 1
2[Ri]补?Y
补异号(够减 ) 0
2[Ri]补 +Y

3,提高除法运算速度的方法 —— 跳 0跳 1除法
跳 0跳 1除法规则是:
( 1)如果余数 R≥0且 R的高 k个数位均为 0,则本次直接商 1,后跟 k?1个 0。 R左移 k位后,减去除数 Y得新余数。
( 2)如果余数 R< 0,且 R的高 k位个数位均为 1,
则本次商为 0,后跟 k?1个 1,R左移 k位后,加上除数 Y,得新的余数。
( 3)不满足上述规则①和②中条件时,按一位除法上商。
3.4 浮点数的运算方法
3.4.1 浮点数的加减法运算设有两浮点数 X,Y,实现 X± Y运算,其中
X=MX.
XE2
,Y=MY,
YE2
( 1)“对阶”操作
( 2)尾数的加 /减运算
( 3)规格化操作
( 4)舍入
( 5)检查阶码是否溢出
3.4.2 浮点数的乘除法运算
1,浮点数的阶码运算
( 2) 判断溢出
2,浮点数的舍入处理
3.浮点乘法运算步骤
( 1)求乘积的阶码。即两数阶码之和。
( 2)尾数相乘。
( 3)规格化处理。
( 4)舍入(一般 0舍 1入法)。
( 5)判断溢出(判断阶码是否溢出)。
3.5 浮点数设计
( 1)编程困难
( 2)表数范围小
( 3)数据存储单元的利用率低
3.5.1 浮点数的表示格式
一个浮点数 N可以用以下的方式表示。
e
mrmN
1 1 q p
mf ef e m
3.5.2 浮点数的表示范围表 3-10尾数用原码、纯小数时规格化浮点数的表数范围
pmr1
1?qer 1)1( qermpm rr
1?
mr
qer
mm rr1
1
mr
qer
mm rr 1
)1( pmr q
er?
1)1( qermpm rr
表数范围 规格化尾数 阶 码 规格化浮点数最大正数 (Nmax)
最小正数 (Nmin) -
最大负数 (?Nmax) -
最小负数 (?Nmin)
3.5.3 浮点数的表数精度则绝对表数误差( absolute representation error)为:
δ=︱ M?N︱
相对表数误差 (relative representation error)为:
δ=
N
NM?
表 3-11一种浮点数表示方式所能表示的全部浮点数阶码尾数阶码( q=1,rm=2)
1( 1.1) 0( 1.0)?1( 0.1)?2( 0.0)
尾数
p=2,
rm=2,
0.75( 0.11) 3/2 3/4 3/8 3/16
0.5( 0.10) 1 1/2 1/4 1/8
0.5( 1.10)?1?1/2?1/4?1/8
0.75( 1.11)?3/2?3/4?3/8?3/16
3.5.4 浮点数的表数效率浮点数表示方式的表数效率问题定义为:
全部浮点数个数个数可表示的规格化浮点数
q
e
p
m
q
e
p
mm
rr
rrr


22
12)1(2 1
3.5.5 浮点数的尾数基值的选择由浮点数表数范围可知,最大浮点数范围的绝对值可以近似表示为:
qer
mrN?m a x
可见,表数范围主要与阶码长度 q和尾数基值 rm
有关。
而浮点数的表数精度可描述为:
)1(
2
1),( p
mm rpr?
3.5.6 浮点数格式的设计
( 1)尾数 m的数制和码制
( 2)阶码 e的数制和码制
( 3)尾数基值 rm
( 4)阶码基值 re
( 5)尾数字长 p
( 6)阶码字长 q
3.5.7 浮点数尾数的下溢处理方法
( 1)截断法
( 2)舍入法
( 3)恒置,1”法
( 4)查表舍入法
3.6 数据校验码
表 3-13 8位奇偶校验码编码
数 据 奇校验码的编码 偶校验码的编码
00001010 100001010 000001010
数 据 奇校验码的编码 偶校验码的编码
00010110 000010110 100010110
10001101 110001101 010001101
3.6.2 海明校验码
它的实现原理是在数据中加入几个校验位,并将数据的每一个二进制位分配在几个奇偶校验组中。
3.6.3 循环冗余校验码
1,CRC码的编码方法
2,CRC的译码及纠错
3,生成多项式的选择
3.7 高级数据表示
3.7.1 自定义数据表示
1,带标志符的数据表示法类型标志符 数 据 值图 3-13 带标志符的数据表示方式
2位 2位 1位 4位 1位功能 陷阱 封写 类型 校验 数据值图 3-14 R-2计算机中带标志符的数据表示方式
10位标志符
( 1) 简化了指令系统和程序设计 。
( 2) 便于实现一致性校验 。
( 3) 简化了编译程序 。
( 4) 支持了数据库系统的实现与数据类型无关的要求 。
( 5) 能由硬件自动完成数据类型的变换 。
( 6) 方便软件调试 。
2,数据描述符表示法描述符
101 各种标志符 长度 地址
( a) 数据描述符
000 数据
( b) 数据图 3-16 D-6700机数据表示方式数据
3.7.2 向量数组数据表示
3.7.3 堆栈数据表示
堆栈机器则不同,具体表现如下 。
( 1) 有若干高速寄存器组成的硬件堆栈,并附加控制电路让它与主存中的堆栈区在逻辑上组成一个整体,使堆栈的访问速度是寄存器的,
堆栈的容量是主存的 。
( 2) 有很丰富的堆栈操作类指令且功能很强,
直接可对堆栈中的数据进行各种运算和处理 。
( 3) 有力地支持高级语言程序的编译 。 假定有算术赋值语句:
F=A*B+C/(D?E)
( 4) 有力地支持子程序的嵌套和递归调用 。
3.7.4 引入数据表示的原则
一方面是看系统的效率是否提高,即是否减少了实现时间和所需要的存储空间。
另一方面,是否引入某种高级数据表示还要看引入这种数据表示后,其通用性和利用率是否提高。