思路:首先看十进制是如何做的:
5+7=12,三步走第一步:相加各位的值,不算进位,得到
2。第二步:计算进位值,得到
10. 如果这一步的进位值为
0,那么第一步得到的值就是最终结果。第三步:重复上述两步,只是相加的值变成上述两步的得到的结果
2和
10,得到
12。同样我们可以用三步走的方式计算二进制值相加:
5-101,
7-111 第一步:相加各位的值,不算进位,得到
010,二进制每位相加就相当于各位做异或操作,
101^111。第二步:计算进位值,得到
1010,相当于各位做与操作得到
101,再向左移一位得到
1010,
(101&111)<<1。第三步重复上述两步, 各位相加
010^1010=1000,进位值为
100=(010&1010)<<1。 继续重复上述两步:
1000^100 = 1100,进位值为
0,跳出循环,
1100为最终结果。
class Solution {
public:
int Add(int num1, int num2){//将加法分为进位的部分和不进位的部分,和为两部分之和
while (num2!=0) {
int temp = num1^num2; //不用进位的部分
num2 = (num1&num2)<<1; //进位的部分
num1 = temp;
}
return num1;
}
};