1. 十进制数的编码表示
- 4位十进制有权码
XXXX码其中的X
代表对应二进制位的权值
8421码 | 2421码 | 5211码 | 4311码 |
---|---|---|---|
0000 | 0000 | 0000 | 0000 |
0001 | 0001 | 0001 | 0001 |
0010 | 0010 | 0011 | 0011 |
0011 | 0011 | 0101 | 0100 |
0100 | 0100 | 0111 | 1000 |
0101 | 1011 | 1000 | 0111 |
0110 | 1100 | 1010 | 1011 |
0111 | 1101 | 1100 | 1100 |
1000 | 1110 | 1110 | 1110 |
1001 | 1111 | 1111 | 1111 |
- 4位十进制无权码
- 余3码:8421码的基础上加3
即二进制的(0011)
- 格雷码:任何两个相邻的
十进制数字
的二进制编码
只有一位二进制位状态不同,其余三位必须相同
- 余3码:8421码的基础上加3
余3码 | 格雷码(1) | 格雷码(2) |
---|---|---|
0011 | 0000 | 0000 |
0100 | 0001 | 0100 |
0101 | 0011 | 0110 |
0110 | 0010 | 0010 |
0111 | 0110 | 1010 |
1000 | 1110 | 1011 |
1001 | 1010 | 0011 |
1010 | 1000 | 0001 |
1011 | 1100 | 1001 |
1100 | 0100 | 1000 |
2.数制间的相互转换
- 二进制与八进制,十六进制的转换:以小数点为起点,向左或向右将二进制三位(8进制)或四位(16进制)一组进行分组,当二进制位数不足一组时,在
整数的最高位之前
,或小数的最低位之后
补零凑足一组,八进制和十六进制的转换以二进制为桥梁
- 二进制和十进制的转换
- 二进制转十进制:按权相加法,将二进制编码为 1 的位的权值相加,需要对2的幂值比较熟悉,小数点后第一位权值是2-1
- 十进制转二进制
- 减权定位法:按权相加法的逆应用
- 除基取余法和乘基取整法,当用于十-二进制转换时,这两种方法分别叫做
除2取余法
,乘2取整法
-
除2取余法
- 乘2取整法
- 用2乘十进制小数,
积的整数部分
作为二进制小数最高位
- 积的小数部分继续乘2,取整数部分作为二进制小数次高位
- 重复此过程,直至其为0或已满足转换精度或者遇到了循环为止
- 将每次乘得的整数位在小数点之后从高到低进行排列,就得到了转换后的二进制小数
- 用2乘十进制小数,
-
3.数据校验方法
- 奇偶校验码 :在原数据位的基础上增加一位
奇偶校验位
构成校验码
,使用校验码进行数据传送,通过检测数据的奇偶性是否改变
来判断出错情况- 奇校验:
校验位
的取值使得数据位和校验位
中1的个数
加起来为奇数 - 偶校验:
校验位
的取值使得数据位和校验位
中1的个数
加起来为偶数 - 可检测出错误,无法确定错误位置,且无法纠错
- 奇校验:
- 海明校验码
- 可发现错误且具纠错能力
- 基本思想:n个有效的
数据位
中插入k个校验位
,形成n+k位海明码
-
k个
校验位
将海明码分为k个奇偶校验组
,每一位合理地分配在几个不同的校验组中,某一位出错时会引起相关校验组的检测值发生改变,通过几个校验组的联合交叉定位,可确定出错位置,实质上是一种多重奇偶校验方法
- SEC码(纠一或检二码),要么纠正一位错,要么检测两位错,必须指明是要纠错还是检错,n为有效数据为个数,k为校验位个数
-
SEC-DED码(纠一且检二码):可同时纠正一位错且检测两位错
- 海明码编码规则
- 每个校验位 Pi 的海明码位号为 2i-1,例如 P3 的海明码下标为 23-1 = H4
- 校验组的选取方法:被校验的每一位位号等于校验它的各校验位的海明码位号之和
- 以一个字节 8位 的数据为例,
- 确定位数,根据不等式关系得校验位个数 k = 5
- 分配校验码的海明码位号,P1 = 1 , P2 = 2, P3 = 4, P4 = 8,P5 = 13,因为总共只有 13 位,而 25-1 = 16 超出了海明码总位数,故这里只能将 P5 校验码安排在 H13了
- 进行分组
海明码位号 | 数据位/校验位 | 参与校验的校验位位号 |
---|---|---|
H1 | P1 | 1 |
H2 | P2 | 2 |
H3 | D1 | 1,2 |
H4 | P3 | 4 |
H5 | D2 | 1,4 |
H6 | D3 | 2,4 |
H7 | D4 | 1,2,4 |
H8 | P4 | 8 |
H9 | D5 | 1,8 |
H10 | D6 | 2,8 |
H11 | D7 | 1,2,8 |
H12 | D8 | 4,8 |
H13 | P5 | 13 |
- 校验逻辑
- P4 = D8⊕D7⊕D6⊕D5 ,P4的海明码序号为8,而在表中,D8 D7 D6 D5 数据位参与 P4 的校验,故这些数据认为是参与 P4 校验的一组,进行异或操作得到 P4 的校验逻辑
- P3 = D8⊕D4⊕D3⊕D2
- P2 = D7⊕D6⊕D4⊕D3⊕D1
- P1 = D7⊕D5⊕D4⊕D2⊕D1
- P5 = D8⊕D6⊕D5⊕D3⊕D2⊕D1 ,P5校验码的生成比较特殊,观察可知,仅D4,D7参与了三组校验,而其余数据位都只参与了两组校验,使得不同码字距离不等,于是让仅参与两组校验的数据位和 P5 为一组再进行一次校验
- 海明码译码校验过程:
- 译码过程需连同
校验位
一起执行异或操作,分组译码结果组成指误字S5~S1 - S5 = P5⊕D8⊕D6⊕D5⊕D3⊕D2⊕D1
- S4 = P4⊕D8⊕D7⊕D6⊕D5
- S3 = P3⊕D8⊕D4⊕D3⊕D2
- S2 = P2⊕D7⊕D6⊕D4⊕D3⊕D1
- S1 = P1⊕D7⊕D5⊕D4⊕D2⊕D1
- 译码过程需连同
- 指误字的不同组合反映海明码的出错情况
- S5~S1为00000,表示无错
- S5~S1仅有一位不为0,表示某一
校验位
或3位海明码(包括数据位和校验位)
出错 - S5~S1两位不为0,发生双错,只能发现错误,不能确定出错位置
- S5~S1 三位不为0,发生单错,认为是
一位数据错
,出错位的位号由指误字低4位S4~S1指明,通过对出错位进行定位后,将改位变反
即可纠正错误 - S5~S1四或五位不为0,出错情况严重,系统出现故障
- 循环冗余校验码(CRC码)
- 适合串行数据传送场合
- 如果将一个
合法码字首尾连接进行循环移位,每移一位得到的结果仍然是合法码字
- CRC码的数学基础:
模2运算
- 模2加,模2减:运算结果同
异或
- 模2乘,模2除:部分积和部分余数按照模2加减进行运算,模2除时,当被除数或部分余数的首位为1时,商1,为0商0
- 模2加,模2减:运算结果同
- 数据位和校验位需满足不等式:
-
2k ≥ n + k + 1
k为校验码位数,n为数据位位数
-
2k ≥ n + k + 1
- 求CRC码的过程:
- 题目给出有效数据
M(X)
和生成多项式G(X)
,根据M(X)
的位数n和上述不等式求出校验码位数k - M(X)左移k位 M(X) * Xk = M(X) << k
- 用左移后的表达式模2除
G(X)
得到,Q(X) + R(X) / G(X)
,其中Q(X)为商,R(X) 为余数,这个余数就是校验位的值 - 这个余数 R(X)与M(X) * Xk 相加即得到
CRC码
- 题目给出有效数据
4.真值与机器数
- 二进制真值
- 十进制真值
- MSB:
有符号数的最高数值位
,即最高有效位 - LSB:
有符号数的最低数值位
,即最低有效位 - 有符号数:带有1位符号位,通常0代表正数,1代表负数,
移码与此相反
- 对于正数而言,原码,反码,补码与二进制真值相同,书写定点整数时,用
逗号
将符号位和数值位分开 - 对于负数:
- 原码符号位为1,其余位与二进制真值数值位相同
- 反码符号位为1,其余位与二进制真值数值位每位相反,
0变1,1变0
- 补码符号位为1,其余位与二进制真值数值位相比,每位取反后末位+1 (即+1LSB)
- 0的表示
- 原码,反码 0的表示不唯一
-
补码的0表示唯一,故补码和原码,补码相比多出一个码点,小数负数可以表示到 -1.0,整数负数可以表示到 -2n,
此时补码形式为 100000....,除了符号位外,其余数值位全为0,n位数值位个数
机器数形式 | 二进制真值 | 0的表示 |
---|---|---|
原码 | +0.000 0000 | 0.000 0000 |
原码 | -0.000 0000 | 1.000 0000 |
补码 | +0.000 0000 | 0.000 0000 |
补码 | -0.000 0000 | 0.000 0000 |
反码 | +0.000 0000 | 0.000 0000 |
反码 | -0.000 0000 | 1.111 1111 |
移码 | +0.000 0000 | 1.000 0000 |
移码 | -0.000 0000 | 1.000 0000 |
- 表示范围
- 原码和反码的表示范围相同,且正负域相对于0对称
- 补码的表示范围大于原码和反码,正数表示范围同原码,负数表示范围多一个码点,可表示到-1或-2n
- 移码:数值位和补码相同,符号位0代表负数,1代表正数
- 原码,反码,补码,移码转换规则
- 正数原码, 反码,补码表示相同
- 负数的转换:
- 原码和补码双向转换的方法:数值位每位按位取反,末位+1
- 原码和反码双向转换的方法:每位取反
- 反码转补码:末位+1(
即+1LSB)
-
负数利用原码求补码的一个技巧:
从原码数值位从右往左逐位寻找第一个1,这个1的右边同原码,左边每位取反即可得到补码
- 不论正数还是负数,对补码符号位取反得到移码
- 原码,补码,反码运算特性
- 补码和反码运算时,符号位和数值位可作为整体看待,一起参加运算
- 原码运算时符号位不能参与运算,需单独处理
通常是异或运算
- 变形补码(模4补码)
- 使用双符号位,最高位总是表示正确的符号
- 00 表示正数
- 01 表示正溢出
- 10 表示负溢出
- 11 表示负数
5.定点运算
- 原码加减法
- 符号位不参与运算, 仅绝对值进行加减
- 根据加减数的不同符号组合情况确定绝对值是相加还是相减
- 补码加减法
参与运算的操作数均用补码表示
符号位和数值位一起参与运算
结果的符号位
由运算自动产生
运算过程符号位向高位产生的进位自动丢掉
运算结果亦为补码
-
补码加法基本公式
[X + Y]补 = [X]补 + [Y]补 (mod M)- 定点小数表示时,M = 2,定点整数时,M = 2n+1
n为数值位位数
,模M的作用是抹掉多余的1
- 定点小数表示时,M = 2,定点整数时,M = 2n+1
-
补码减法基本公式
[X - Y]补 = [X]补 + [-Y]补 (mod M)- 由[Y]补求[-Y]补的方法:
连同符号位,每位取反,末位+1
- 由[Y]补求[-Y]补的方法:
-
补码加减运算结果的溢出判断方法
-
根据
符号位之间关系
-
同号两数相加
,结果符号变反
,则发生溢出 -
异号两数相减
,结果符号与减数相同
,则发生溢出
-
-
利用
进位信号
之间的关系,- Cs:符号位向更高位的进位输出
- CMSB: 最高数值位向符号位的进位
- V = 1 ,发生溢出,V = 0 ,无溢出
-
⊕为异或符号
V = Cs ⊕ CMSB
-
利用
双符号位补码
-
FS1:第一符号位,即
真符位
:始终代表正确的正负符号 - FS2:第二符号位
- 01正溢出
-
10负溢出
V = FS1 ⊕ FS2
-
FS1:第一符号位,即
-
6.移位运算
- 逻辑移位
- 移位时
不考虑数据符号位
- 只适用于
无符号数
,逻辑数
- 不管逻辑左移还是逻辑右移,移位后的
空出位一律补0
,移出位一律丢掉
- 逻辑左移:高位移丢,低位补0
- 逻辑右移:低位移丢,高位补0
- 移位时
- 循环移位
- 将机器字
首尾相接
,移位通路构成封闭环路 - 移出位自动填补到空出位
- 循环左移:最高位移出填入最低位
- 循环右移:最低位移出填入最高位
- 将机器字
- 算术移位
- 保证移位后
符号位取值不变
- 原码,补码,反码算术移位规则表
- 算术移位的
误差
及溢出
- 补码算术移位时的
符号延伸(扩展)特性
- 补码
算术右移
时,不论正数负数,MSB始终填充符号位值
- 补码
- 保证移位后
- 误差的
舍入处理
方法- 截断法(截尾) :
无条件丢掉超出位数
,且保留下来的部分不做任何改变,单向误差(负误差,对结果精确值起减小作用)
,多次误差累积对运算结果精度影响较大
- 末位恒置1法:舍去结果最低位超出的数值位同时,
将机器数末位LSB恒置1
,双向误差
,对结果精度影响较小
,更细致的处理方式:当机器数最低位为1或移出位中有1时,末位置1,否则不做末位置1操作
- 0舍1入法
-
将要舍去部分的最高位
作为判断标志
,为0则舍,为1则丢掉超出位数后+1LSB -
双向误差
,精确度最高
-
原码
或补码正数
表示时,上述规则可直接应用 -
补码负数
有所改变:- 超出部分最高位为0则舍去
- 超出部分最高位为1,且其余各位
全为0时舍去
- 超出部分最高位为1,且其余各位
不全为0时
,舍去超出位后+1LSB
-
- 截断法(截尾) :
7.定点乘法运算
-
原码一位乘法运算规则
- 符号位不参与运算
- 参与运算的是两数的绝对值
- 乘积结果的符号位由
两数符号位异或运算
产生 -
部分积
初值为0,取单符号位
-
乘数
的最低位
作为判断位
,若为1,加被乘数
,若为0,加0
,然后部分积逻辑右移
一位 - 乘数数值部分n位时,做n次
加法
和右移
,得到2n位乘积绝对值 - 例题: 计算 X * Y,其中 X = 0.110 111,Y = -0.101 110
-
补码一位乘运算规则
- 参与运算的数X Y均用
补码
表示 - 符号位参与运算,运算结果的符号位由运算过程
自动生成
-
部分积初值
设为0,部分积
使用双符号位
,乘数
使用单符号位
-
乘数
最低位之后增加附加位Yn+1,且初始时Yn+1 = 0 - 乘数最低两位YnYn+1作为
判断位
,部分积运算规则如下:-
YnYn+1 = 00,部分积 +0,
算术右移一位
-
YnYn+1 = 01,部分积 +[X]补,
算术右移一位
-
YnYn+1= 10,部分积 +[-X]补,
算术右移一位
-
YnYn+1 = 11,部分积 +0,
算术右移一位
-
YnYn+1 = 00,部分积 +0,
- n位数值位的数据,进行
n+1
次运算,n
次右移,最后一次只运算不移位
- 运算完成YnYn+1清零
- 例题:计算 X * Y,其中 X = -0.010 111,Y = -0.010 101
- 参与运算的数X Y均用
-
补码两位乘运算规则
- 参与运算的数均用
补码
表示 - 符号位参与运算,且结果的符号位由运算过程
自动产生
- 部分积初值为0,
部分积
采用三位符号位
- 乘数最低一位增加附加位Yn+1,且其初值为0
- 乘数的数值部分为n位,乘数的符号位
-
n为奇数时,乘数
单符号位
,(n+1)/2
次运算和移位
,最后一步右移 1 位
-
n为偶数时,乘数
双符号位
,n/2 + 1
次运算
,n/2
次移位
,最后一步不移位
-
n为奇数时,乘数
-
乘数
的最低三位Yn-1YnYn+1作判断位
,每求一次部分积算术右移两位
,部分积运算规则如下: -
Yn-1YnYn+1 = 000,部分积 +0,
算术右移两位
-
Yn-1YnYn+1 = 001,部分积 +[X]补,
算术右移两位
-
Yn-1YnYn+1 = 010 ,部分积 +[X]补,
算术右移两位
-
Yn-1YnYn+1 = 011 ,部分积 +[2X]补,
算术右移两位
-
Yn-1YnYn+1 = 100 ,部分积 +[-2X]补,
算术右移两位
-
Yn-1YnYn+1 = 101 ,部分积 +[-X]补,
算术右移两位
-
Yn-1YnYn+1 = 110 ,部分积 +[-X]补,
算术右移两位
-
Yn-1YnYn+1 = 111 ,部分积 +0,
算术右移两位
- 运算结束时Yn-1YnYn+1清零
- 例题:同补码一位乘的题目
- 参与运算的数均用
8.定点除法运算
- 原码加减交替法(不恢复余数除法)运算规则
- 参与运算的是两数的
绝对值
- 符号位不参与运算,商的符号位通过两数原码的符号位
异或运算
产生 - 若X绝对值为0, 则商为0,若Y的绝对值为0,则按非法除数处理
- 运算前应满足 X绝对值<Y绝对值,否则按
溢出
处理 - 设商的初值为
0
,部分余数的初值为被除数
- 部分余数采用
单符号位
,且符号位初值位0
- 部分余数的运算:
- 首先
试减
,X* + [-Y*]补,原码除法要用到除数的补码
- 若
部分余数
为正R > 0
,商1 Qn = 1,余数和商联合逻辑左移 1 位1 << R|Q
,减除数 +[-Y*]补 - 若
部分余数
为负R < 0
,商0 Qn = 0,余数和商联合逻辑左移 1 位1 << R|Q
,加除数 +Y* - 第
n+1
步,- 若余数为正
R > 0
,商1 Qn = 1,商单独逻辑左移 1 位1 << Q
,运算结束 - 若余数为负
R < 0
,商0 Qn = 0,商单独逻辑左移 1 位1 << Q
,若结果需要余数,需恢复余数余数不移位直接加除数 R + Y*
- 若余数为正
- 真正余数R的绝对值形式 R* = Rn * 2-n,Rn为
机器余数
,是算法最后一步得到的余数
- 首先
- 例题: X / Y,其中 X = -0.10101,Y = 0.11011
- 参与运算的是两数的
- 补码加减交替法(不恢复余数除法)运算规则
- 操作数均为
补码
- 符号位参与运算,
商符
由运算过程自动产生
- 若X绝对值为0, 则商为0,若Y的绝对值为0,则按非法除数处理
- 运算前应满足 X绝对值<Y绝对值,否则按
溢出
处理 - 设商的初值为
0
,部分余数的初值为被除数
-
部分余数
采用单符号位
或双符号位
- 部分余数运算规则:
- 首先
试减
,试减规则:- X Y同号,[X]补 + [-Y]补
- X Y异号,[X]补 + [Y]补,
- 试减完
上商
-
部分余数R 和Y同号,商1 Qn = 1,余数和商联合逻辑左移一位
1 << R|Q
,做减法+[-Y]补 -
部分余数R 和Y异号,商0 Qn = 0,余数和商联合逻辑左移一位
1 << R|Q
,做加法+[Y]补
-
部分余数R 和Y同号,商1 Qn = 1,余数和商联合逻辑左移一位
- 第
n+1
步- 余数不移位,
商单独左移一位末位恒置1
,若不需求余数,除法结束 - 若需求余数:
- R X同号,除法结束
- R X异号,R Y同号,+[-Y]补,R Y异号,+[Y]补,
- 余数不移位,
- 首先
-
X* > Y*
时,补码除法也可以进行,此时商使用双符号位
,其真符位FS1通过X Y的符号位异或
产生,第二个符号位FS2由运算产生,表示的是溢出到整数位的数值
,而不是补码的符号位,可利用商双符号位的异或
进行溢出判断
- 例题:例题: X / Y,其中 X = 0.01101,Y = -0.11011
- 操作数均为
9.浮点数
- 浮点数的基本格式
-
M为
尾数
,形式同定点小数
-
E为
阶码
,带符号的k位整数,形式同定点整数
-
R为阶码的
基数
N = M ⊕ RE
-
M为
- 浮点数的一般格式
- 规格化浮点数的表示范围
- 描述规格化浮点数表示范围的关键方法是找准几个
边界点
-
最大正数
:阶码
达到可表示的最大值
,尾数
达到可表示的最大值
-
最小正数
:阶码
达到可表示的最小值
,尾数
达到规格化正数表示的最小值
-
最小负数
:阶码
达到可表示的最大值
,尾数
达到可表示的最小值
-
最大负数
:阶码
达到可表示的最小值
,尾数
达到规格化表示的负数最大值
-
- 描述规格化浮点数表示范围的关键方法是找准几个
- 例题1 阶补尾原:
浮点数阶码8位,其中1位符号位,用补码表示;尾数8位,其中1位符号位,用原码表示,使用规格化写出可表示的数的范围最大正数:阶码的补码正数可表示最大值为:
0,111 1111 = +127
,而尾数原码可表示正数最大值为:0.111 1111 = 1 - 2-7,故最大正数为
2127 × (1 - 2-7)最小正数:阶码的补码负数最小值为
1,000 0000 = -128
,阶码为负,只要尾数为正,所表示的数还是正数,故阶码可以取负数
,尾数原码可表示的规格化最小正数
为:0.100 0000 = 2-1,故可表示的最小正数为:
2-128 × 2-1最大负数:阶码的补码最小值为
1,000 0000 = -128
,尾数原码的最大负数为1.100 0000
不能是1.111 1111,因为-0.5 > -0.5+-0.25+-0.125+....
最小负数:阶码的补码最大值是
0,111 1111
,尾数原码的最小负数为1.111 1111
故可表示的负数真值范围为:
2127 × (2-7 - 1) ~ 2-128 × (-2-1)
- 例题2 阶移尾补:
某机字长32位,其浮点数采用规格化阶移尾补格式,其中阶码8位,其中1位符号位;尾数24位,其中1位符号位,使用规格化写出可表示的数的范围- 最大正数:阶码移码最大值,尾数补码最大值为1,111 1111;0.111...111(23个1)
故可表示的最大正数为:
2127 × (1 - 2-23) - 最小正数:阶码移码负数最小值,尾数补码最小值为0,000 0000;0.1 00...000(22个0)
故可表示的最小正数为:
2-1 × 2-128 - 最大负数:阶码移码负数最小值,尾数补码负数最大值为0,000 0000;1.0 11...111(22个1)
故可表示的最小正数为:
- (2-1 + 2-23) × 2-128
这里注意,补码规格化最大负数的形式为1.0 111...111 (1.0后面全为1) ,其对应的十进制真值为
- (2-1 + 2-n ),其中n为尾数数值位的个数 - 最小负数:阶码移码最大值,尾数补码负数最小值为1,111 1111;1.00...000(23个0)
故可表示的最小负数为:
-1 × 2127 ,补码负数最小可以表示到-1 - 上溢
阶码 > 最大阶码
- 下溢
阶码 < 最小阶码
,按机器零处理
- 最大正数:阶码移码最大值,尾数补码最大值为1,111 1111;0.111...111(23个1)
- 规格化的浮点数
- 要求
尾数
的最高位
必须是一个有效数值
,满足这种规定的浮点数称为规格化浮点数
- 原码表示的尾数,规格化浮点数尾数的
最高数值位总是为1
,即 MMSB = 1 - 补码表示尾数时,Ms⊕ MMSB = 1表示规格化的浮点数,即
符号位
和MSB
取值不能相同
- 原码规格化浮点尾数的表示范围
正负域对称
,而补码则不对称 -
-1/2
对原码来说是规格化浮点数,对补码而言不是规格化的浮点数。-1
原码无法表示,而对补码而言是一个规格化尾数
- 要求
- 浮点数的规格化处理
- 右规:发生尾数溢出时,尾数的数值超出小数表示范围冲到了
符号位
,只需将尾数右移一位
,阶码+1
- 左规: 运算后尾数绝对值小于
规格化尾数值
,可能需要左规多次,尾数每左移一位,阶码-1,直到符合规格化数的判断条件
- 右规:发生尾数溢出时,尾数的数值超出小数表示范围冲到了
- 浮点数的溢出判断
- 以
阶码
的上溢
为溢出标志
- 以
- 移码的加减运算
- [Ex]移 + [Ey]移 = [Ex]移 + [Ey]补
- [Ex]移 - [Ey]移 = [Ex]移 + [-Ey]补
- 移码运算的溢出判断,采用
双符号位
,Es1为0表示无溢出,否则发生溢出,Es2表示移码的正负- Es1Es2 = 00,负数
- Es1Es2 = 01,正数
-
Es1Es2 = 10,正溢出
上溢
,溢出出错 -
Es1Es2 = 11,负溢出
下溢
,看做机器0
10.浮点数的加减运算
- 例题1:按机器补码浮点运算步骤计算[X+Y]补,[X-Y]补,其中X = 2-011 * 0.101 100,Y = 2-010 * -0.011 100
- ①先将X Y转换成浮点机器数形式,
题目只提到了按补码,故操作数的阶码和尾数都用补码表示,写阶码时,用逗号将符号位和数值位分隔开
- [X]补 = 1,101;0.101 100,
- [Y]补 = 1,110;1.100 100,
- ②对阶
(小的向大的对齐)
- 先将X Y的阶码用双符号位补码形式写出来,
- [Ex]补 = 11,101,[Ey]补 = 11,110,[-Ey]补 = 00,010
- [ΔE]补 = [Ex]补 + [-Ey]补 = 11,101 + 00,010 = 11,111 < 0
-
ΔE = -1,X的阶码小于Y的阶码,
X向Y对齐,阶码+1,尾数右移一位
- 对齐后的 [X]补 = 1,110;0.0101 10 ,对阶完毕
- ③尾数相加减
-
注意,
要使用对完阶后的X和Y浮点数形式
,容易粗心使用对阶前的浮点数形式出错 - 使用
双符号位补码
对尾数进行加减运算,可利用双符号位取值情况进行溢出判断
- 这里运算后
尾数并未溢出
-
注意,
- ④结果规格化
- [X+Y]补的尾数 11.111 010不是规格化浮点数,需要左规3位,使得 Ms ⊕ MMSB = 1,左规一次阶码减1
- 左规右规时,对阶码进行加减运算时,最好选
十进制数据作为桥梁
,可以确保结果的正确性
- ⑤舍入:
尾数并未右移,故无需舍入
- ⑥溢出判断:
阶码并未超出可表示的数据范围,故无溢出
- 最后将运算结果转换为二进制真值:
- ①先将X Y转换成浮点机器数形式,
- 例题2:按机器补码浮点运算步骤计算[X+Y]补,[X-Y]补,其中X = 2101 * -0.100 101,Y = 2100 * -0.001 111
-
①先将X Y转换成浮点机器数形式
- ②对阶
- 这里注意,Y的尾数对阶算术右移时,将1位移出到了保护位
- 这里注意,Y的尾数对阶算术右移时,将1位移出到了保护位
- ③尾数相加减
- 注意,尾数补码加减运算要带上
保护位
- 注意,尾数补码加减运算要带上
- ④结果规格化
- 也需带上
保护位
,将保护位移入有效数值位
- 也需带上
- ⑤舍入
- 这里使用
0舍1入法
,负数补码舍入时,保护位为1,其余为全为0,需舍,不进行入1操作
- 这里使用
- ⑥溢出判断:
阶码并未超出可表示的数据范围,故无溢出
-
最后将运算结果转换为二进制真值:
-
11.浮点数的乘除运算
-
例题1:
- ①先将X Y转换成浮点机器数形式
- 注意尾数是要求用
原码
表示,不要粗心习惯性地用补码
表示
- 注意尾数是要求用
- ②阶码相加减
使用双符号位移码进行运算,方便进行溢出判断
- ③尾数相乘除
按照原码乘除运算规则进行
- ④结果规格化
- 原码的规格化数要求MMSB始终为1,故X * Y需左规一位
- 原码的规格化数要求MMSB始终为1,故X * Y需左规一位
- ⑤舍入
-
0舍1入法
,原码而言,保护位最高位为0,舍去
-
- ⑥溢出判断:
阶码并未超出可表示的数据范围,故无溢出
-
最后将运算结果转换为二进制真值:
- ①先将X Y转换成浮点机器数形式
12.加法器
- 一位全加器
- A,B为输入,Sum为输出,Cin为输入进位信号,Cout为输出进位信号
- 串行加法器:加法速度太慢,仅用于速度要求不高的简单装置中
- 并行加法器
- 一个n位加法器可实现n位二进制数据同时相加
- 各进位信号由
低到高串行传递
- 简述提高加法器乘数运算速度的方法及原理
- 采用
阵列乘除法器
,使用了并行的阵列运算电路
,即并行的多级加减法硬件电路
,故可以降低进位产生的延时,从而提高乘除法运算速度 - 提高加法器运算速度的关键是
降低进位信号的传播时间
,而先行进位加法器
是一种并行进位
的并行加法器,较高位运算结果的产生不依赖于低位的进位,打破进位间依赖关系,直接由并行输入的加数产生进位信号,并行得到各位的进位
,各级的进位彼此独立产生
,可以减小进位产生的延时,故可以提高乘除运算速度
- 采用
- 行波进位加法器和先行进加法器的区别和特点,写出四位先行进位表达式
- 行波进位加法器:即
串行进位
的并行加法器,是最简单的并行加法器。n位行波进位加法器由n个全加器通过进位输入输出端首尾连接组成,较高位运算结果的产生依赖于低位的进位,其链式的串行进位结构也叫作串行进位链
- 行波进位加法器进位逻辑表达式:Ci+1 = gi + piCi
- 先行进位加法器:是一种
并行进位
的并行加法器。打破进位间依赖关系,直接由并行输入的加数产生进位信号,并行得到各位的进位
,各级的进位彼此独立产生
,有效提高进位速度
,将各级间的进位级联传播给去掉了,由此可以减小进位产生的延时。 - 四位先行进位表达式
将串行进位表达式中前一位进位信号用其表达式直接代入即可得到
:- C1 = g0 + p0C0
- C2 = g1 + p1g0 + p1p0C0
- C3 = g2 + p2g1 + p2p1g0 + p2p1p0C0
- C4 = g3 + p3g2 + p3p2g1 + p3p2p1g0 + p3p2p1p0C0
- 行波进位加法器:即