今天刷题的时候看到了这个,不用+号运算符还真不会,所以就去学习了一下,下面给大家分享一下。
不使用加法运算符计算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,跳出循环。