欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

2.3 简单的二进制乘法(定点原码一位对应相乘)

最编程 2024-08-01 09:01:53
...

2.3.1 原码一位乘

步骤:

        ①对给定的x*y,其中x为被乘数,y为乘数;

        ②计算过程中取双符号位(避免加法时产生溢出),初始时部分积为0,将乘数的数值部分的绝对值写到乘数部分。

        ③判断乘数的最低位:如果为1,则执行部分积=部分积+x,且右移一位;如果为0,则执行部分积=部分积+0,且右移一位

        ④移位的次数=乘数的数值位的位数。

        ⑤计算符号位,组合数值部分的值即为结果。

        原说法有点抽象,我这里总结就是,结果=符号+数值,(可以直接跳过看例子,这里个人理解)符号使用异或逻辑(也就是正正得正,负负得正,正负得负);然后数值位需要计算:y(乘数)从最后一位开始看起,为1时加x,为0则不加,相加时有小数点要对齐,注意每看完一位右移一位。

        看例子,保准你懂:

        比如有x= 0.1100,y= -0.1001

        先看符号位,一正一负结果必为负,结果加上即可。

        数值位:先把部分积设为初始值0(长度扩展到和x相同),即 00.0000 

y(0.1001)的最后一位是1,所以要加上x的绝对值

00.0000 + 00.1100 = 00.1100        右移一位,前面补0,变成:

00.01100

        y的倒数第二位是0,需要加0(相当于不用加),

所以还是00.01100 ,        注意不要忘记右移! 变成:

00.001100

        继续倒数第三位,还是0,熟悉了直接右移,变成:

00.00011(小数结尾的0可以不写,但要注意加法时小数点对齐)

        接下来处理最后一位(也就是第一位),是1,继续加x的绝对值

00.00011 + 00.1100 = 00.11011        右移一位,前面补0,变成:

00.011011

        最后加上的符号位的最终结果为:- 00.011011

        

在来个题巩固一下:

 

      

         

        

推荐阅读