剑指 Offer 65. 不用加减乘除做加法
题目
写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。
- 提示:
a, b 均可能是负数或 0
结果不会溢出 32 位整数
解法
使用位运算。
假设a、b都是某一位二进制位,那么n是非进位和,c是进位,则n和c的运算方式为
n = a ^ b
c = (a&b)<<1
所以a+b = n+c
class Solution {
public int add(int a, int b) {
while(b != 0){
int c = (a&b)<<1;
a ^= b;
b = c;
}
return a;
}
}