Sword finger offer finger bit operation

After thinking about it for a long time, it is still puzzled, so let's give an official idea.
Link: Official answer of Niuke.com.
Here are some 好的解法.

public class Solution {
    
    
    public int Add(int num1,int num2) {
    
    
        int result = 0;
        int carry = 0;
        do{
    
    
            result = num1 ^ num2;       //不带进位的加法
            carry = (num1 & num2) << 1; //进位
            num1 = result; 
            num2 = carry;  
        }while(carry != 0); // 进位不为0则继续执行加法处理进位
        return result;
    }
}

Another high score solution

class Solution {
    
    
public:
    int Add(int num1, int num2)
    {
    
    
        int sum,res;
        while(num2)
        {
    
    
            sum=num1^num2;
            res=(num1&num2)<<1;
            num1=sum;
            num2=res;
        }
        return num1;
    }
};

Detailed version

class Solution {
    
    
public:
    int Add(int num1, int num2)
    {
    
    
        return num2 ? Add(num1^num2, (num1&num2)<<1) : num1;
  
    }
};

Guess you like

Origin blog.csdn.net/as1490047935/article/details/110248436