(据说是重中之重的)补码一位乘、二位乘

您所在的位置:网站首页 补码一位乘法的乘数移位规则 (据说是重中之重的)补码一位乘、二位乘

(据说是重中之重的)补码一位乘、二位乘

2024-07-11 20:53| 来源: 网络整理| 查看: 265

补码一位乘:

例: 已知 x=0.1011,y= - 0.0001(真值) [x]补=01011 , [y]补= 11111 [x *y]补=111110101 [x]补 * [y]补=101010101 显然,[x * y]补 ≠ [x]补 * [y]补 ▲ 对两个正数来说,它们补码的乘积等于它们乘积的补码。若乘数是负数时,这种情况就不成立了。

校正法 校正法的运算法则跟原码一样,只需对乘法判断正负来确定是否需要校正就ok了。 有关校正法的两个定理①对于补码一位乘,当乘数y为正数时,不管被乘数x的符号如何,都按照原码乘法的运算规则来计算,但是移位应该按照补码的算术移位来操作。②对于补码一位乘,当乘数y为负数时,不管被乘数x的符号如何,都按照原码乘法的运算规则来计算,但是移位应该按照补码的算术移位来操作,并且需要在最后的结果上加上[-x]补进行校正。

例:假设[x]补=0.1101,[y]补=1.0101,用校正法来计算[x*y]补? 解:首先算出[-x]补=1.0011,取[y]补为乘数,乘数符号位不参与运算。 部分积符号位一定要两位,避免出现溢出现象导致出错。 在这里插入图片描述 最后结果是1.01110001。(表中的符号位是两位,从之前的学习知道,符号位取最高位)。

从校正法的原理来看,如果x是一个正数,y是一个负数,那么应该使用一个技巧,将x与y调换,反正x的符号是什么都没有关系。如果y是正数那么就省去了最后一步加[-x]补的校正。如果x与y都是负数,则必须校正。

比较法(booth算法)(重点) 运算规则: booth算法运算规则① 符号位参与运算,运算的数均以补码表示。②被乘数一般取双符号位,参加运算,部分积初值为0③乘数取单符号位以决定最后一步是否需要校正,即是否加[-x]补④乘数末尾增设附加位yn+1,初始值为0

yn、yn+1状态运算规则:假设yn+1 - yn=a,对应的操作就是部分积先加上a * [x]补,再右移一位(减[x]补,就是加上[-x]补)

ynyn+1yn+1 - yn操作000部分积右移一位011部分积加[x]补,再右移一位10-1部分积加[-x]补,再右移一位110部分积右移一位

例:x=-0.1101,y=0.1011,用补码一位乘求[xy]补? [x]补=1.0011,[-x]补=00.1101(用双符号表示),[y]补=0.1011(用单符号表示) 在这里插入图片描述 所以结果是:[xy]补=1.01110001。

补码二位乘: 运算法则①符号位参加运算,两数均用补码表示②部分积与被乘数均采用3位符号,乘数末位增加一位yn+1,其初值为0 yn-1ynyn+1操作000加0,右移两位001加[x]补,右移两位010加[x]补,右移两位011加2[x]补,右移两位100加2[-x]补,右移两位101加[x]补,右移两位110加[-x]补,右移两位111加0,右移两位

④若尾数字长n为偶数,(不含符号),乘数用双符号,最后一步不移位; 若尾数字长n为奇数(不含符号),乘数用单符号,最后一步移一位。

例:x=-0.1101,y=0.0110,用补码两位乘[xy]补? [y]补=00.0110(用双符号表示) 在这里插入图片描述 所以最后结果为:[xy]补=1.10110010

这里我们会一种计算方法就可以了,那就是booth算法吧。

此次分享就到这里,欢迎大家指导指正~ 我是爱吃肉的小白yyyloki,如果你觉得不错的话点个赞👍吧!或者你可以关注,持续更新计组。我们下次见~886

在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3