原码一位乘法学习辅导在定点计算机中,两个原码表示的数相乘的运算规则是:乘积的符号位由两数的符号按异或运算得到,而乘积的数值部分则是两个正数相乘之积。设n位被乘数和乘数用定点小数表示(定点整数也同样适用)被乘数[x]原=xf.x0x1x2…xn乘数[y]原=yf.y0y1y2…yn则乘积[z]原=(xf⊕yf).(0.x0x1x2…xn)(0.y1y2…yn)式中,xf为被乘数符号,yf为乘数符号。乘积符号的运算法则是:同号相乘为正,异号相乘为负。由于被乘数和乘数和符号组合只有四种情况(xfyf=00,01,10,11),因此积的符号可按“异或”(按位加)运算得到。数值部分的运算方法与普通的十进制小数乘法相类似,不过对于用二进制表达的数来说,其乘法规则更为简单一些:从乘法y的最低位开始,若这一位为“1”,则将被乘数x写下;若这一位为“0”,则写下全0。然后再对乘数y的高一位进行的乘法运算,其规则同上,不过这一位乘数的权与最低位乘数的权不一样,因此被乘数x要左移一位。依次类推,直到乘数各位乘完为止,最后将它们统统加起来,便得到最后乘积z。设x=0.1011,y=0.1101,让我们先用习惯方法求其乘积,其过程如下:×0.1101(x)0.1011(y)+11011101000011010.10001111(z)如果被乘数和乘数用定点整数表示,我们也会得到同样的结果。但是,但是人们习惯的算法对机器并不完全适用。原因之一,机器通常只有n位长,两个n位数相乘,乘积可能为2n位。原因之二,只有两个操作数相加的加法器,难以胜任将n个位积一次相加起来的运算。为了简化结构,机器通常只有n位长,并且只有两个操作数相加的加法器。为此,必须修改上述乘法的实现方法,将x·y改写成适于如下定点机的形式:一般而言,设被乘数x、乘数y都是小于1的n位定点正数:x=0.x1x2…xn;y=0.y1y2…yn其乘积为x·y=x·(0.y1y2…yn)=x·(y12-1+y22-2+…+yn2-n)=2-1(y1x+2-1(y2x+2-1(…+2-1(yn-1x+)…))令zi表示第i次部分积,则上式可写成如下递推公式:z0=0z1=2-1(ynx+z0)…zi=2-1(yn-i+1x+zi-1)…zn=x·y=2-1(y1x+zn-1)显然,欲求x·y,则需设置一个保存部分积的累加器。乘法开始时,令部分积的初值z0=0,然后求加上ynx,右移1位得第1个部分积,又将加上yn-1x,再右移1位得第2个部分积。依此类推,直到求得y1x加上zn-1并右移1位得最后部分积,即得x·y。显然,两个n位数相乘,需重复进行n次“加”及“右移”操作,才能得到最后乘积。这就是实现原码一位乘法的规则。【例】x=0.1101,y=0.1011,用原码一位乘法计算x·y=?[解:]求解过程如下:部分积乘数说明00.0000yf1011z0=0+00.1101y4=1,+x00.1101→00.01101yf101右移,得z1+00.1101Y3=1,+x01.0011→00.100111yf10右移,得z2+00.0000Y2=0,+000.1001→00.0100111yf1右移,得z3+00.1101Y1=1,+x01.0001→00.10001111yf右移,得z3=xy所以x·y=0.10001111