补码一位乘法
这几天疫情在家看网课,学校的补码视频讲的太枯燥了。上B站结果就缺这一节😥。。。这就很悲伤呀。
对于补码反码和定点减法弄不明白的同学可以看看这篇:不列公式说定点运算,以及为什么需要反码补码https://www.cnblogs.com/AD-milk/p/12737812.html
补码乘法说来也简单,和原码差不多,符号位也要参与运算。
首先来看例子
设[X]补=X0.X1X2X3...Xn[Y]补=Y0.Y1Y2Y3...Yn
则有:[X∗Y]补=[X]补∗(0.Y1Y2Y3...Yn)−Y0∗[X]补
展开合并后有:[X∗Y]补=[X]补∗∑(Yn+1−Yn)2-n
看黄色部分,也就是说我们到底是加上X补还是减又或者是0,就看倒数第二位的值于倒数第一位的差值。
也就是说:
在遵循原码乘法的规则上,对部分积的加减做处理
1.Yn=Yn+1 ,那么部分积加上零(0*[X]补当然是零啦),再右移一位
2.Yn <Yn+1(01) ,部分积加上[x]补,再右移一位
3.Yn >Yn+1(10) ,部分积加上[-x]补,再右移一位
这下诸位应该看懂了吧,怎么加,就是一直用倒数第二位减去倒数第一位的差值再去乘以X的补就OK了。