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
在来个题巩固一下: