用位操作实现两个整型相加,不允许用加号
整型相加主要分为两部分.一部分是相加操作,一部分是进位操作.
比如2+3;就是010+011
先通过异或运算算出相加的部分
010^011 = 001
再通过&和<<操作来计算出移位之后的结果
010&011 = 010010<<1 = 100.
容易知道001+100的结果其实就是101,也就是5,但是由于这里不让用+操作..所以我们还要递归调用一次.直到没有移位操作的时候,才能结束程序...
代码如下:
public class Solution {
public int GetSum(int a, int b) {
if(b == 0)
return a;
int sum1 = a^b;
int sum2 = (a & b)<<1;
return GetSum(sum1,sum2);
}
}