不用加法实现a+b

作者: Neulana | 来源:发表于2016-04-15 15:00 被阅读1127次

    这到算法题好像经常出现在面试题集锦里面,反正我是看见它好多次了。不用加法实现两个数的和,我们可以首先想到位运算,那么怎么才能通过位运算实现加法呢?

    异或运算有个别名叫做不进位加法,A^B得到的值就是各位上出去后面进上来的进位后它该有的值,那么问题就转化成它的哪些位是有进位的。我们知道只有1+1才能产生进位,也只有1&1的结果才是1,所以我们可以将两个数做一次与运算来模拟产生进位的位置。但是,进位是要“进”到前一位,所以我们还需要将A&B的计算结果左移一位,然后再和前面的A&B的结果相加,但是人家题目说了不能使用加法,所以致力还是不能直接相加,那怎么办呢?没关系,继续按照我们这里实现的这种加法加。只不过两个参数不再是A和B了,而是(A^B)和((A&B)<<1)......

    我们应该想到这里面肯定会用到循环,因为加法里面还有加法啊。那什么时候循环结束呢?当加法中表示进位的数为0时,不用再进行继续下一次加法了。

    好了,原理说明白了,直接上代码吧。

    public int aplusb(int a, int b) {
               while (b != 0) {
                int _a = a ^ b;
                int _b = (a & b) << 1;
                a = _a;
                b = _b;
            }
            return a;
        }
    

    更多文章,欢迎访问个人博客我的博客

    相关文章

      网友评论

      本文标题:不用加法实现a+b

      本文链接:https://www.haomeiwen.com/subject/gwjnlttx.html