原码一位乘法
我直接上例子吧,说实话我看书上的定义过程,我个憨憨不懂。🤮🤮🤮
eg:已知X=0.110,Y=-0.101,用原码一位乘法求X*Y。
首先符号位单独做异或运算,数据部分是绝对值运算🙃 方法一:求出X.Y的原码
[X]原=0.110 [Y]原=1.101(这里的原码第一个数字都是符号位哦🙃)
而部分积一开始都是初始为0的,但都是双符号位,而我自己理解是就是原码前面加个0。
部分积 乘数 右移的数字
00.000 0.101
我们来从右向左看乘数,由此判断要加的数是|X|的绝对值。
乘数的第一个数字是1,是1就是加|X|,是0就加部分积的初始值,也就是00.00(就是0但是你要根据你部分积的位数来判断0的表现方式)
部分积 乘数 右移的数字
00.000 0.101
+00.110
—————
00.110→要右移这个新的数
→00.011 0(移掉了右边0)
来判断乘数的第二个数字是0,则将右移的新数加0
00.011
+00.000
——————
00.011→右移这个新的数
→00.001 10(移掉了右边1)
来判断乘数的第三个数字是1,则右移的数加|X|
00.001
+00.110
——————
00.111→右移这个数
→00.011 110(移掉了右边1)
算到哪里截止呢,就是从右向左遇到小数点就可以停了。
而最后的结果呢😊 还记得我们最开始说好的符号位要单独做异或运算,X是正数为0,Y是负数为1,做异或就是1。
最终右移的新数00.011还记得我们一开始说了是双符号位,最后我们结果就单符号就好了,就是0.011然后异或的1和小数点前的的数做加法,就是1.011但是你忘记了我们的右移的数了嘛,把它添在后面就行了。
所以,XY=1.011110
(右移的数我怕你们不清楚,就是你依次移掉的数按从右向左写就好了😁)
方法二:不看符号位,X=0.110 Y=0.101
部分积一开始还是0,根据乘数右向左第一个判断要加的数是|X|还是0。
部分积 乘数
00.000 0.101(第一个是1)
+00.110
——————
00.110→右移这个数
→00.0110 (这一次右移的数不单独拿出来)
+00.000 0.101(第二个是0)
——————
00.0110→右移这个数
→00.00110 0.101(第三个是1)
+00.110
———————
00.11110→右移这个数
→00.011110 0.101(第四个是小数点不用加啦)
右移的新数是00.011110
还和前面一样,结果是单符号位就可以了,即为0.011110,但是不能忘了一开始数的符号位哦~
正负异或为1,加上就是1.011110
所以XY=1.011110
这里Y=-0.101
我太菜鸟了🐤,排版不太会,所以出来的可能有点错位,所以你们可以看图😁