这题,受过vivado或者数字电路摧残的同学应该可以很自然想到加法器的一些原理,也就很容易想到位运算。
单个位的和直接异或实现,进位用与实现。
这道题里边,和也是用异或实现,不过要加上进位的结果,进位很简单,两个数做与运算就好了,不过要记得左移一位,因为当前位的进位是给上一位加的,然后反复这个过程,直到进位为0结束。
代码如下所示:
class Solution {
public:
int add(int a, int b) {
int res,carry;
do
{
res=a^b;
carry=((unsigned int)(a&b)<<1);
a=res;
b=carry;
}while(b);
return res;
}
};
不过这里边注意以下unsigned的强转,貌似不加会直接溢出。。。可能