题外话
高三毕业,想都没想过自己会成为一名程序员,但是既然选择了就坚定的走下去吧。在学校的时候都是用笔记记录自己的学习过程,没想到的开头不是那么完美,现在要在家上网课啦,突发奇想想把自己学到的知识分享给大家,希望像我这样的小白也能够找到适合自己的学习方法啊。最后一句啊,我们一起加油,会好起来的!
布斯算法
上周学习计算机组成原理这门课,讲到了布斯算法,不知道是不是由于网课的原因,总觉得自己没有很懂布斯算法,课下又查找了很多资料,但是大多数的文章描述都还是有些晦涩难懂,经过自己的一番理解,希望能够给像我这样的小白一些不一样的理解方法。
步入正题
在举例之前,先大概说一下布斯算法计算的规则:
1.如果当前的乘数位是1,前面的乘数位是0, 则从乘积中减去被乘数;
2.如果当前的乘数位是0,前面的乘数位是1,则从乘积中加上被乘数;
3.如果当前的乘数位是0/1,前面的乘数位也是0/1,即出现00/11对,那么我们直接进行移位操作,就是将当前的乘数位变成高位的乘数位;
4.我们一定要把乘数和被乘数补成相同的二进制位数表示,下面有具体解释哦;
5.虚构一个0开头,就是在最低位的后面添加一个0,作为最低位的前面的乘数位;
6.完成4后,这时我们知道乘数和被乘数的二进制表示位数如0011,位数就是4,那么如果计算结果超过2n(n)为二进制表示位数,那么我们将2n高位的其他位省略。
可能你看到这里就觉得这是个啥,我还是不明白,不要着急。一定要往下看例子哦,一定可以明白的。
无符号整数的布斯算法:
假设X = 5;Y = 3,那么求X * Y。
我们将X用二进制表示为101,Y表示为11,这时我们发现X与Y用二进制表示的位数不同,也就是说X是3位,Y是2位,这是我们会碰到的第一个问题,那就是把乘数和被乘数的二进制表示补成相同的位数,记住是在高位补0哦,因为是无符号整数,因此就可以看成是正数的,所以高位补0。那X为101,Y为011,接下来开始计算两者的乘积,图片举例哦:
可能有些姐妹不理解我图中最后计算的时候用圈圈出来的那一列为什么要补上去,这就涉及到另一个容易遗忘的点啦,那就是要把第一个计算得到的补位到2n,原理我觉得我可能描述不太明白,大家有疑惑可以去看一下慕课里面电子科技大学纪禄平、罗克露、刘辉、张建、廖建明老师的计算机组成原理,里面也有关于布斯算法计算机中的计算过程,我觉得讲的还是比较明白的,嘿嘿~
无符号整数就说到这里啊~
有符号整数的布斯算法:
有符号整数的布斯算法其实跟上面的差不多,我们主要需要区分的就是最高位是符号位,就是因为原码一位乘无法解决[XY]的补等于X的补乘以Y的补,因此我们用补码一位乘的方法来解决这个问题,举例如下:
这里大家可能还有疑惑的就是小数的计算了,下面看一下这个例子就会明白啦,其实原理都是相同的啊,记得最后加上小数点就行了,跟整数的乘法是一样的哦
写的有一点点挤了,大家见谅啊,发现写完这篇文章,自己对布斯算法的理解也更加深刻了,除了上文中给大家推荐的慕课外,我也看到了一篇文章写的极好,推荐给大家,网址为/xisheng/p/9260861.html(如有侵权,请联系我删除哦)
结束语
好啦,第一篇文章就到此结束啦,希望能够帮到大家,以后我也会把自己遇到的一些问题发布在这里的,希望大家会喜欢啊,加油!
如果觉得《计算机组成原理——补码一位乘(Booth算法)+举例+小白理解》对你有帮助,请点赞、收藏,并留下你的观点哦!