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

今天刷题的时候看到了这个,不用+号运算符还真不会,所以就去学习了一下,下面给大家分享一下。
不使用加法运算符计算a+b

代码分享

public class Solution {
     /**
     * @param a: An integer
     * @param b: An integer
     * @return: The sum of a and b 
     */
    public int aplusb(int a, int b) {
        while(b!=0)
        {
            int m=a^b;
            int n=(a&b)<<1;
            a=m;
            b=n;
        }
        return a;
    }
}

详细解释

这里使用的是异或运算,也就是二进制运算,运算规则如下:
1 ^ 1=0
0 ^ 0=0
1 ^ 0=1
0 ^ 1=1

如果a=11,b=9,那么转化成二进制就是a=1011,b=1001。
a ^ b=1011^1001=0010
这是不进位的结果,
我们还要考虑进位的情况,及结果里是1的地方。
所以需要用公式 (a&b)<< 1
(a&b)就是a和b里都是1的那些位置,a & b << 1 就是进位
如果不需要进位了,那结果就为0,b=0,跳出循环。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值