(据说是重中之重的)补码一位乘、二位乘 |
您所在的位置:网站首页 › 补码一位乘法的乘数移位规则 › (据说是重中之重的)补码一位乘、二位乘 |
补码一位乘:
例: 已知 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]补为乘数,乘数符号位不参与运算。 部分积符号位一定要两位,避免出现溢出现象导致出错。 从校正法的原理来看,如果x是一个正数,y是一个负数,那么应该使用一个技巧,将x与y调换,反正x的符号是什么都没有关系。如果y是正数那么就省去了最后一步加[-x]补的校正。如果x与y都是负数,则必须校正。 比较法(booth算法)(重点) 运算规则: booth算法运算规则① 符号位参与运算,运算的数均以补码表示。②被乘数一般取双符号位,参加运算,部分积初值为0③乘数取单符号位以决定最后一步是否需要校正,即是否加[-x]补④乘数末尾增设附加位yn+1,初始值为0yn、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(用单符号表示) ④若尾数字长n为偶数,(不含符号),乘数用双符号,最后一步不移位; 若尾数字长n为奇数(不含符号),乘数用单符号,最后一步移一位。 例:x=-0.1101,y=0.0110,用补码两位乘[xy]补? [y]补=00.0110(用双符号表示) 这里我们会一种计算方法就可以了,那就是booth算法吧。 此次分享就到这里,欢迎大家指导指正~ 我是爱吃肉的小白yyyloki,如果你觉得不错的话点个赞👍吧!或者你可以关注,持续更新计组。我们下次见~886 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |