定点数的原码补码乘法
2018-03-05 本文已影响173人
Rumbles
定点乘法运算之原码一位乘法
原理:我们手工进行乘法运算的时候,是通过y从右往左每一位都和x相乘,(乘完一次就往前缩进一个数位)然后把结果相加得到的~机器也是这样运算哒~不过机器为了节约空间,毕竟按照手算的方法那样两个n位相乘最后可能会需要2n的长度空间才能得到结果,计算机是采用把每次用y的一位和x相乘的结果(叫做部分积)累加后右移一位,再处理y当前位的下一位的
举例说明:
比如x = 0.1101 ,y = 0.1011
1、先把部分积设为初始值0(长度扩展到和x相同),即
00.0000
y的最后一位是1,所以要加上x的绝对值:
00.0000 + 00.1101 = 00.1101
右移1位,前面补0,变成了00.01101
2、好啦,下面处理y的倒数第二位,还是1,继续加x的绝对值:
00.01101 + 00.1101 = 01.00111
别忘记右移1位,前面补0,这样就变成了00.100111
3、y倒数第3位是0,只要加0就好了(加0的结果还是本身啊。),所以还是:00.100111
既然加了0,别忘记右移一位哦,所以变成了00.0100111
4、y还剩最后一个位(也就是第一位)没处理啦,第一位是1哦,那就加上x的绝对值:
00.0100111 + 00.1101 = 01.0001111
别忘记右移一位!所以最后结果是 00.10001111~~~
嗯好啦,这就是最后结果~~不过双符号位就变成一个0就好咯,也就是最后结果为0.10001111~~~
设置寄存器:
A:部分积累加和,乘积的高位
B:存放被存数
C: 存放乘数 还有低位
参考:
http://blog.csdn.net/baidu_31657889/article/details/53559471
定点乘法运算之补码一位乘法
原码乘法的主要问题是符号位不能参加运算,单独用一个异或门产生乘积的符号位。故自然提出能否让符号数字化后也参加乘法运算,补码乘法就可以实现符号位直接参加运算。
比较法:
设置寄存器:x = -0.1101 y=-0.1011 计算:【xy】补
A:部分积累加和,乘积的高位
B:乘数的补码 x补 = 11 0011
-B:-X补 = 00 1101
C: 存放乘数 还有低位 y补 = 1.0101
比较yn和 yn+1
00 A右移一位 也就是成1/2
01 A+x补 右移一位
10 A+-X补 右移一位
11 A右移一位
A C Cn+1
00 0000 10101 0 10 A+-X补 右移一位
+00 1 1 01
00 1 1 01 10101 0 计算和 并且右移
00 0110 11010 1 01 +x补 右移一位
+11 0011
11 1001 1 1010 右移
11 1100 11101 0 10 A+-X补 右移一位
+00 1101
1 00 1001 11101 0 右移 舍弃1
00 0100 11110 1 +x补 右移一位
+11 0011
11 0111 11110 1 右移
11 1011 11111 0
校正 10 +-X补 右移一位
+00 1101
1 00 1000 11111 0 舍弃1 低位留4位
= 00 1000 1111
=+0.10001111
校正法: