A + B 问题(不能用+等数学运算符。)

给出两个整数a和b, 求他们的和, 但不能使用 + 等数学运算符。

说明

1.a和b都是 32位 整数么?

是的
2.我可以使用位运算符么?

当然可以

样例

如果 a=1 并且 b=2,返回3

解题思路:

首先想到的是异或运算,如二进制的11^10=01,每一位异或都相对于每一位的加法,但是缺乏进位。
使用按位与“&”运算可以帮助我们判断该位是否有进位。如11&11 =11,说明两位在加运算中都产生了进位1。由于该进位是加在高位上的,所以
很自然的想到了把与运算的结果往左移一位,再和异或结果相加,即为最后结果。 

代码

public class Solution {

    public int aplusb(int a, int b) {
        // write your code here
        // a^b;//10^11=01没有进位
        // a&b //10&11=10 说明第2个数有进位,但是进位在高位(第3位)
        // <<1 //左移动一位 就是100
        // 最后把结果再进^操作给a,直到没有进位
          if (b == 0)//有1代表还有进位
            return a;
        else
            return aplusb(a^b, (a&b) << 1);
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值