【Java】两整数之和

题目描述

不使用运算符 + 和 - ,计算两整数 a 、b 之和。

示例 1:

输入: a = 1, b = 2
输出: 3

示例 2:

输入: a = -2, b = 3
输出: 1

都知道java位运算符,可怎么用?

解题思路

异或操作:相同为0,不同为1,就已经能模拟出无进位的加法

比如1+2 = 3

    0 1
+   1 0
-------
    1 1

那有进位怎么办?与操作+左移一位

比如2+3 = 5

异或一次后 ,算出低位

    1 0
+   1 1
-------
    0 1

与操作一次后

    1 0
+   1 1
-------
    1 0

左移一位 ,得到进位

    1 0
+   1 1
-------
    1 0 << 1 = 1 0 0

此时把进位和低位加起来,这个时候又是一次加法操作,回忆刚刚的a和b的加法操作,把低位和进位分别看做a和b,继续重复上面的过程,所以这一定是一个while的循环,直到进位为0退出循环。

public class getSum {
    public int getSum(int a, int b){
        if(a == 0){
            return b;
        }
        if(b == 0){
            return a;
        }
        int lower = 0;
        int carrier = 0;
        while(true){
            lower = a^b;
            carrier = a&b;
            if(carrier == 0){
                break;
            }
            a = lower;
            b = carrier<<1;
        }
        return lower;
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值