原码一位乘法与补码一位乘法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/L20902/article/details/86551606

原码1位乘法

在定点计算机中,两个原码表示的数相乘的运算规则是:乘积的符号位由两数的符号按异或运算得到。而乘积的数值部分则是两个正数相乘之积。设n位被乘数和乘数用定点小数表示(定点整数也相同适用)

被乘数 [x]原 = xf .xxx2 … xn        

乘数   [y]原 = yf .yyy2 … yn

乘积   ]原 = ( xf⊕yf ) . (0. xxx2 …xn)(0 . yy2 …yn)

式中,xf为被乘数符号。yf为乘数符号。

乘积符号的运算法则是:同号相乘为正,异号相乘为负。因为被乘数和乘数和符号组合仅仅有四种情况(xyf = 00,01,10,11),因此积的符号可按“异或”(按位加)运算得到。

数值部分的运算方法与普通的十进制小数乘法相类似。只是对于用二进制表达的数来说,其乘法规则更为简单一些:从乘法y的最低位開始。若这一位为“1”。则将被乘数x写下;若这一位为“0”,则写下全0。然后再对乘数y的高一位进行的乘法运算,其规则同上,只是这一位乘数的权与最低位乘数的权不一样。因此被乘数x要左移一位。依次类推。直到乘数各位乘完为止。最后将它们统统加起来。便得到最后乘积。  

补码1位乘法

原码乘法的主要问题是符号位不能參加运算,单独用一个异或门产生乘积的符号位。

故自然提出是否能让符号数字化后也參加乘法运算,补码乘法就能够实现符号位直接參加运算

设被乘数 [x]补 = x0.x1x2…xn 和乘数 [y]补 = y0.y1y2…yn 均为随意符号,则有补码乘法算式

  [ · ]补 = [x]补 ·  ( - y0 + ∑ yi * 2^-i )

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

[x·y]补   = [x]补·[ - y0 + y1^2-1 + y2^2-2 + … + yn^2-n]

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

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

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

 补码一位乘法运算规则

(1) 假设 yn = yn+1,部分积 [ zi ] 加0。再右移一位;

(2) 假设 yn yn+1 = 01。部分积加[ x ]补。再右移一位;

(3) 假设 yn yn+1 = 10,部分积加[ - x]补,再右移一位;

这样反复进行 n+1 步,但最后一步不移位。包含一位符号位,所得乘积为 2n+1 位,当中 n 为尾数位数。

猜你喜欢

转载自blog.csdn.net/L20902/article/details/86551606