A + B 问题
题目
给出两个整数a和b, 求他们的和, 但不能使用 + 等数学运算符。
说明
a和b都是 32位 整数么?
- 是的
我可以使用位运算符么?
- 当然可以
样例
如果 a=1 并且 b=2,返回3
题解
本题的本质就是实现二进制加法运算的过程,具体思路如下:
如a=7(0111),b=13(1101)- 首先忽略进位,将二进制各位数字相加,即使用^运算得到1010。
- 再从最低位开始记录进位数,进位操作为(a&b<<1),迭代至a&b<<1==0时表示没有进位操作了,得到进位值为即1010。
- 将结果相加得到10100,即20。
class Solution {
/*
* param a: The first integer
* param b: The second integer
* return: The sum of a and b
*/
public int aplusb(int a, int b) {
int c = a&b;
int d = a^b;
return c == 0 ? d : aplusb(c<<1,d);
}
}
Last Update 2016.8.12