定点数乘法

原码乘法:

  原码的手动乘法:就和小学学过的竖式乘法写法一致,从右到左,乘数每一位分别与被乘数相乘。

          1011

      x  1101

-------------------

         1011

       0000

     1011

   1011

----------------

 10001111

原码的一位乘法:

原理:从传统竖式乘法里面可以看到,每次乘数只有一位与被乘数相乘。如果用乘数的最低位和被乘数相乘,再把它右移一位,就可以作为部分积,和下一位相乘后的结果相加。

 

具体计算:

  符号位最后单独处理,绝对值参加乘法运算。该算法因为每次根据乘出的一位来计算位积,所以称为原码一位乘法。

步骤:初始部分积为0,Yi为1;若Yi为0,部分积加|X|,累加结果右移一位,得到新部分积;(i依次为n n-1 n-2....)

符号位异或运算。

为什么要右移:对于乘数,最后一位已经用过了,没有价值,所以直接右移丢弃掉,剩下的空间刚好用来存储部分积右移的部分。换句话说,部分积可以视为在乘数左侧,每次右移挤占乘数空间

例题:

  以+1011  *   -1101为例做一位乘法

  初始的部分积为0,0000,0表示正数,不参与计算。部分积实际为0000.                数据显示:0000 1101

  1)用乘数1101的最后一位1乘1011 并加上之前的部分积0000,结果为1011,

部分积右移一位,挤占乘数1101的位置,乘数变成了1110,部分积变成0101           数据显示: 0101 1110

 

   2)用乘数1110的最后一位0乘1011,并加上部分积,结果为0101        数据显示: 0101 1110

部分积右移,挤占乘数,乘数变成1111,部分积变成0010              数据显示: 0010 1111

 

  3)用乘数1111的新最后一位1乘1011,并加上部分积,结果为1101          数据显示: 1101 1111

部分积右移,挤占乘数,乘数变成1111,部分积变成0110              数据显示: 0110 1111

 

   4)用乘数1111的新最后一位1乘1011,并加上部分积,结果为0001      数据显示: 0110 1111

部分积右移,挤占乘数,乘数变成1111,部分积为1000            数据显示:1000 1111

 

 

与乘数1111拼接

最终结果为1,1000 1111                前面的1表示负数

-------------

补码一位乘法

在计算机中用补码运算较为方便。补码乘法运算时,可以将补码的数值部分同原码一样直接做乘法,在根据乘数符号位做修正即可。

在修正X*Y时,Y的符号位为0不用修正,Y的符号位为1 时减去X

此外,补码的符号位可以直接参加运算,不用单独处理;并且他们需要两位符号位

举例:

X为+0.1011  Y为-0.1101

转化为补码后,X为00.1011  Y为11.0011

计算大致同上述步骤。由于Y的符号位为11,因此计算结果00.0010 0001要减去X补码,也就是加上-X补码

实际结果为1.0111 0001

转化为原码是-0.1000 1111

转换为原码的话为-0.1000 1111

posted @ 2020-12-19 17:02  namezhyp  阅读(931)  评论(0编辑  收藏  举报