作者:whisper
链接:http://proprogrammar.com:443/article/256
声明:请尊重原作者的劳动,如需转载请注明出处
2.3 定点运算
移位移的是数,小数点不动
左移 绝对值扩大
右移 绝对值缩小
在计算机中,移位与加减配合,能够实现乘除运算
算术移位的硬件实现
4. 算术移位和逻辑移位的区别
算术移位 有符号数的移位
逻辑移位 无符号数的移位
逻辑左移 低位添0,高位移丢
逻辑右移 高位添0,低位移丢
算术移位不会改变数的正负,逻辑移位可能改变数的正负
1、补码加减运算公式
(1)加法
两数补的加=两数加的补 整数和小数
(2)减法
A-B = A+(-B)
两数差的补=A的补+(-B)的补
连同符号位一起相加,符号位产生的进位自然丢掉
3. 溢出判断
(1)一位符号位判溢出
两个数符号相同,结果符号与原操作数的符号不同,即为溢出
硬件实现
最高有效位的进位⊕符号位的进位 = 1 溢出
(2)两位符号位判溢出-变形补码(负11,正00)
结果的双符号位 相同 未溢出
结果的双符号位 不同 溢出
(3)进位判断法
最高数值位向符号位的进位C,符号位产生的进位输出值S,相同不溢出,不同则溢出
V=S⊕C
V=1,有溢出;V=0,无溢出
A = -0.1101 B = 0.1011
2. 笔算乘法改进
A • B = A • 0.1011
= 2⁻¹{A+2⁻¹[0•A + 2⁻¹(A + 2⁻¹(A+0))]}
即每次相加得到部分积,再进行右移,相加得到部分积,再右移。。。
3. 改进后的笔算乘法过程(竖式)
形成几次部分积,移位几次,形成几位最后要增加的移位形成的数
小结
乘法 运算可用加和移位实现
n = 4,加4次,移4次
由乘数的末位决定被乘数是否与原部分积相加,然后->1位形成新的部分积,同时乘数->1位(末位移丢),空出高位存放部分积的低位。
被乘数只与部分积的高位相加
硬件
3个寄存器(乘数,被乘数,中间结果),具有移位功能,1个全加器
4. 原码乘法
乘积的符号通过异或运算确定
(3)原码一位乘的硬件配置
5. 补码乘法
(1)补码一位乘运算规则
1)被乘数任意,乘数为正
同原码乘 但加和移位按补码规则运算
乘积的符号自然形成
2)被乘数任意,乘数为负
乘数[y]补,去掉符号位,操作同1)
最后加[-x]补,校正
Booth算法(被乘数、乘数符号任意)(了解)
最后一步不移位,即加比移位多一次
看一个例子
最后结果:1.11011111
整数乘法与小数乘法完全相同
可用逗号代替小数点
原码乘 符号位单独处理
补码乘 符号位自然形成
原码乘去掉符号位运算 即为无符号数乘法
不同的乘法运算需有不同的硬件支持
3. 原码除法
约定
小数定点除法被除数小于除数 整数定点除法 被除数大于除数
被除数不等于0 除数不能为0
(1)恢复余数法
上商试验,如果不够除要恢复余数
(2)不恢复余数法
上商n+1次,第一次上商判溢出,移n次,加n+1次,最后一次移位加后还要根据正负生成一位
上商(相加结果判正负) + 左移 + 加(正/负y的补)
(3)原码加减交替除法硬件配置
4. 补码除法(不太考)
(1)商值的确定
(2)商符的形成
(3)新余数的获得
(4)小结
补码除法共上商n+1次(末位恒置1)
第一次为商符
第一次商可判溢出
加n次,移n次
用移位的次数判断除法是否结束
亲爱的读者:有时间可以点赞评论一下
全部评论