写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。
示例:
输入: a = 1, b = 1
输出: 2
做题思路:
这里使用13二进制为:1101,9二进制为:1001来做例子。
异或 1^1 = 0 ,1^0 = 1,0^0 = 0.从这三个结果可以看出异或就是在做加法,但是没有进位。
与 1&1 = 1,1&0 = 0,0&0 = 0.从这三个结果可以看出与就是跟进位有关。
没有进位:1101和1001异或的结果:0100
进位:1101和1001与的结果:1001,答案是这个吗?显然不是,因为是进位,所以需要左移10010;
没有进位:10110
进位:0
输出10110 = 2^4+2^2+2^1 = 22
代码展示:
class Solution {
public int add(int a, int b) {
int jinwei = 0;
int bujinwei = 0;
while(b != 0){
bujinwei = a^b;
jinwei = (a&b)<<1;
a = bujinwei;
b = jinwei;
}
return a;
}
}