File tree Expand file tree Collapse file tree 2 files changed +2
-92
lines changed Expand file tree Collapse file tree 2 files changed +2
-92
lines changed Original file line number Diff line number Diff line change 22
33## 题解  
44
5- 
6- 
75题目要求不能使用 $+、-$,自然想到使用其他的二元运算符,我们可以根据二进制位,选择位运算符计算得到两数之和。
86
97** 二进制相加,思想类似于十进制加法,但从「逢十进一」变为 「逢二进一」。** 
18160 + 1 = 1 
1917
20180 + 0 = 0 
21- 
2219``` 
2320
24- 
25- 
2621直接使用异或 ^ 运算符的话,需要额外处理进位的情况, 即两个二进制位都为1。
2722
2823我们可以使用 bit位为进位符,来判断这种情况。
3631``` 
3732bit = 0 的情况          
3833
39- 
40- 
4134二进制位相加                    运算后结果     
4235
43- 
44- 
45361 + 1 = 0 (进位)      -->    答案加 0       bit=1 
46- 
47371 + 0 = 1            -->    答案加 2^i     bit=0 
48- 
49380 + 1 = 1            -->    答案加 2^i     bit=0 
50- 
51390 + 0 = 0            -->    答案加 2^i     bit=0 
52- 
5340``` 
5441
5542
5643
5744``` 
5845bit = 1 的情况 
5946
60- 
61- 
6247二进制位相加                    运算后结果 
6348
64- 
65- 
66491 + 1 = 0 (进位)   -->     答案加 2^i      bit=1 
67- 
68501 + 0 = 1          -->    答案加 0        bit=1 
69- 
70510 + 1 = 1          -->    答案加 0        bit=1 
71- 
72520 + 0 = 0          -->    答案加 2^i      bit=0 
73- 
7453``` 
7554
7655数据范围是 $-1000<=x<=1000$,如果没有负数,根据二进制位,我们只需要统计10个二进制位,因为 $2^{10}=1024>100$。
@@ -87,50 +66,29 @@ bit = 1 的情况
8766
8867``` c++ 
8968class  Solution  {
90- 
9169public:
92- 
9370    int getSum(int a, int b) {
94- 
9571        int ans = 0, bit = 0;
96- 
9772        for (int i = 0; i < 32; i++) {
98- 
9973            int x = (a >> i) & 1, y = (b >> i) & 1;
100- 
10174            if (x & y) {
102- 
10375                ans |= (bit << i);
104- 
10576                bit = 1;
106- 
10777            } else if (x | y) {
108- 
10978                ans |= (1 ^ bit) << i;
110- 
11179            } else {
112- 
11380                ans |= (bit << i);
114- 
11581                bit = 0;
116- 
11782            }
118- 
11983        }
120- 
12184        return ans;
122- 
12385    }
124- 
12586};
126- 
12787``` 
12888
12989
13090## 最后 
13191
132- 
133- 
13492大家好,我是编程熊,字节跳动、旷视科技前员工,ACM亚洲区域赛金牌,欢迎 [关注我](https://leetcode-cn.com/u/bianchengxiong/) 和加入 [LeetCode组队刷题群](https://mp.weixin.qq.com/s/TsTcCDboXwnTnUeIW3Zg9Q)。  
13593
13694
@@ -149,5 +107,4 @@ public:
149107
150108
151109
152- 如果题解和文章对你有所帮助,欢迎** 点赞** 支持。
153- 
110+ 如果题解和文章对你有所帮助,欢迎**点赞**支持。 
Original file line number Diff line number Diff line change 22
33## 题解  
44
5- 
6- 
75题目要求不能使用 $+、-$,自然想到使用其他的二元运算符,我们可以根据二进制位,选择位运算符计算得到两数之和。
86
97** 二进制相加,思想类似于十进制加法,但从「逢十进一」变为 「逢二进一」。** 
108
119** 两个二进制位相加有以下四种情况。** 
1210
1311``` 
14- 
15121 + 1 = 0 (进位) 
1613
17141 + 0 = 1  
1815
19160 + 1 = 1 
2017
21180 + 0 = 0 
22- 
2319``` 
2420
25- 
26- 
2721直接使用异或 ^ 运算符的话,需要额外处理进位的情况, 即两个二进制位都为1。
2822
2923我们可以使用 bit位为进位符,来判断这种情况。
3529** 假设现在统计到二进制的第 i 位。** 
3630
3731``` 
38- 
3932bit = 0 的情况          
4033
41- 
42- 
4334二进制位相加                    运算后结果     
4435
45- 
46- 
47361 + 1 = 0 (进位)      -->    答案加 0       bit=1 
48- 
49371 + 0 = 1            -->    答案加 2^i     bit=0 
50- 
51380 + 1 = 1            -->    答案加 2^i     bit=0 
52- 
53390 + 0 = 0            -->    答案加 2^i     bit=0 
54- 
5540``` 
5641
5742
5843
5944``` 
60- 
6145bit = 1 的情况 
6246
63- 
64- 
6547二进制位相加                    运算后结果 
6648
67- 
68- 
69491 + 1 = 0 (进位)   -->     答案加 2^i      bit=1 
70- 
71501 + 0 = 1          -->    答案加 0        bit=1 
72- 
73510 + 1 = 1          -->    答案加 0        bit=1 
74- 
75520 + 0 = 0          -->    答案加 2^i      bit=0 
76- 
7753``` 
7854
7955数据范围是 $-1000<=x<=1000$,如果没有负数,根据二进制位,我们只需要统计10个二进制位,因为 $2^{10}=1024>100$。
@@ -89,52 +65,30 @@ bit = 1 的情况
8965
9066
9167``` c++ 
92- 
9368class  Solution  {
94- 
9569public:
96- 
9770    int getSum(int a, int b) {
98- 
9971        int ans = 0, bit = 0;
100- 
10172        for (int i = 0; i < 32; i++) {
102- 
10373            int x = (a >> i) & 1, y = (b >> i) & 1;
104- 
10574            if (x & y) {
106- 
10775                ans |= (bit << i);
108- 
10976                bit = 1;
110- 
11177            } else if (x | y) {
112- 
11378                ans |= (1 ^ bit) << i;
114- 
11579            } else {
116- 
11780                ans |= (bit << i);
118- 
11981                bit = 0;
120- 
12182            }
122- 
12383        }
124- 
12584        return ans;
126- 
12785    }
128- 
12986};
130- 
13187``` 
13288
13389
13490## 最后 
13591
136- 
137- 
13892大家好,我是编程熊,字节跳动、旷视科技前员工,ACM亚洲区域赛金牌,欢迎 [关注我](https://leetcode-cn.com/u/bianchengxiong/) 和加入 [LeetCode组队刷题群](https://mp.weixin.qq.com/s/TsTcCDboXwnTnUeIW3Zg9Q)。  
13993
14094
@@ -153,5 +107,4 @@ public:
153107
154108
155109
156- 如果题解和文章对你有所帮助,欢迎** 点赞** 支持。
157- 
110+ 如果题解和文章对你有所帮助,欢迎**点赞**支持。 
 
 
   
 
     
   
   
          
    
    
     
    
      
     
     
    You can’t perform that action at this time.
  
 
    
  
    
      
        
     
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments