题目
写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。
思路
位运算 模拟 加法 :
设两数字的二进制形式 a,b
,其求和 s=a+b
,a(i)
代表 a
的二进制第 i
位,则分为以下四种情况:
观察发现,无进位和 与 异或运算(巧记:异或→ 异1获→不同获得1→不同出1相同出0) 规律相同,进位 和 与运算 (全1出1,有0出0) 规律相同(并需左移一位)。因此,无进位和 n
与进位 c
的计算公式如下:
(和 s
)=(非进位和 n
)+(进位 c
)。即可将 s=a+b
转化为:
s=a+b⇒s=n+c
循环求n
和 c
,直至进位 c=0
;此时 s=n
,返回 n
即可。
PS: 注意下图的进位c
别忘了左移一位
java代码如下:
class Solution{
public int add(int a, int b){
while( b != 0){//当进位为0时跳出
int c = (a & b) << 1;// c代表进位
a ^= b;// a代表非进位和,即 n = a ^ b
b = c;// 此时b代表进位
}
return a;// 非进位和 即为最终结果
}
}