位运算实现a+b


题目:给出两个整数 a 和 b , 求他们的和。

a 1 1 0 0 
b 1 0 1 0
c 10 1 1 0

递归:

return b == 0? a : aplusb(a^b,(a&b)<<1);

其中 a^b 表示不同的元素, (a&b)<<1 表示相同的元素。

非递归

tmp = 0
while b != 0
  ans = a^b
  b = (a&b)<<1
  a = tmp

return a

原理 保证 a+b和不变,最后b变成了0,那么a就是a+b了。

猜你喜欢

转载自www.cnblogs.com/ccXgc/p/9718558.html