leetcode371 Sum Of Integers 不用加法计算两个整数的和

来源:互联网 发布:linux漏洞列表 编辑:程序博客网 时间:2024/05/22 02:07

Description

Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -.

Example:
Given a = 1 and b = 2, return 3.

解法

思路:

首先不能用”+”、” - “符号,那么计算两个数的和也就只能用“位运算符”。位运算符是处理二进制数的,先想想十进制的怎么进行加法的。

比如3+18=21。 首先个位相加3+8 = 11,个位是1,有进位。进位再与十位相加得到十位是2。
二进制也一样,如果不考虑进位,那么1+0=1、1+1=0、0+0=0 这个结果是和“异或”(^)位运算符的处理结果是一样的。之后处理进位问题,有且仅有1+1的情况下才会产生进位,所以用“&”位运算符来处理进位情况,运算之后向左移一位(<<)即可。

代码:

    public int getSum(int a, int b) {        if(b == 0) return a;        return getSum(a^b, (a&b)<<1);    }
0 0