剑指 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
;
}
}