补码一位乘(布斯公式)

转自:http://ep02.blog.163.com/blog/static/67655853200821842019254/

 

本文适用于补码表示的定点小数定点整数乘法运算(硬件或软件实现) 

◆ 先考查两个补码乘法运算的例子
例1: 已知 X=0.1011,Y=0.0001(真值)
[X]=01011 , [Y]= 00001
[X*Y]=000001011
[X]*[Y]=000001011
这时有,[X*Y]=[X]*[Y]

例2: 已知 X=0.1011,Y= - 0.0001(真值)
[X]=01011 , [Y]= 11111
[X*Y]=111110101
[X]*[Y]=101010101
显然,[X*Y]  [X]*[Y]

▲ 对两个正数来说,它们补码的乘积等于它们乘积的补码。若乘数是负数时,这种情况就不成立了。

原码乘法的主要问题是符号位不能参加运算,单独用一个异或门产生乘积的符号位。故自然提出能否让符号数字化后也参加乘法运算,补码乘法就可以实现符号位直接参加运算。

为了得到补码一位乘法的规律,先从补码和真值的转换公式开始讨论。(以纯小数为例)

1.  补码与真值的转换公式

设 [x] = x. x1x2xn ,有:

 

                      n                   
x = - x0+∑  xi2-i     
                   i=1 

 

等式左边 x 为真值。此公式说明真值和补码之间的关系。

2.  补码的右移

正数右移一位,相当于乘1/2(即除2)。负数用补码表示时,右移一位也相当于乘1/2。因此,在补码运算的机器中,一个数不论其正负,连同符号位向右移一位(即符号扩展),若符号位保持不变,就等于乘1/2。

3.  补码乘法规则

设被乘数 [x] = x0.x1x2xn 和乘数 [y] = y0.y1y2yn (注意:包括符号位共n+1位)均为任意符号,则有补码乘法算式

 

                                             n  
  [x·y]= [x]·( -y0+∑ yi2-i )
                                                    i=1 

 

为了推出串行逻辑(递推),实行分步算法,将上式展开加以变换:

[x·y]   = [x]·[ - y0 + y12-1 + y22-2 + … + yn2-n]

          = [x]·[ - y0 + (y1 - y12-1) + (y22-1 - y22-2) + … + (yn2-(n-1) - yn2-n)]

          = [x]·[(y1 - y0) + (y2 - y1) 2-1 + … + (yn - yn-1) 2-(n-1) + (0 - yn)2-n]

          = [x]·[...................................] (yn+1  =  0)   

 

               

写成递推公式如下:

         z] = 0 (赋初值0)

        z] = 2 -1z]补 +  (  yn+1 - yn ) [x]补 }       (yn+1  =  0)

  • 10
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值