位图——求两数之和
题目要求很简单,给两个整数ab,计算并返回两数字之和,但是要求不能使用+和-
我们在讲^运算时有一个记法是无进位相加,也就是如果两个都是1,那么1+1要进位此为变成0,但是我们不做真正的进位(前一位不改动),然后0和1的位数相加为1(自然无进位不做处理)。因此我们发现,只有二者都为1的情况下该位才进位,否则都不处理(有点类似于&的运算律)
因此,我们可以用a&b找到两数要进位的位置,但进位并不是在当前位,而是在进位的前一位。(a&b)<<1。然后我们再通过a^b得到两数的无进位相加的位置。然后我们只需要把这两个加起来就可以了(但也不能真的加),只需要重复上述操作即可。把a^b看成a,(a&b)<<1看成b。直到a&b==0完毕(无进位了,a^b就是两数之和)。
int sum(int a,int b)
{while(b!=0){int x=a^b;unsigned int y=(unsigned int)(a&b)<<1;a=x;b=y;}
}