- 异或可实现不进位加法的功能,a ^ b 就是 a,b 相加之后,该进位的地方不进位的结果。
- a & b 就是 a 和 b 里都是 1 的位置, a & b << 1 就是进位。
- a + b = (a ^ b) + (a & b << 1)
int aplusb(int a,int b)
{
while(b)
{
int temp = a^b;
b = (a&b) << 1;
a = temp;
}
return a;
}
进位不可能一直持续,所以我们只要重复上述步骤直到 b 变为 0 就求得了 a + b 的结果。