使用位运算。核心问题在于处理进位问题。 异或用来做不带进位的加法,(num1 & num2)<< 1用来处理进位。定义一个变量用来记录进位的情况。
说明:
1.使用与运算可以判断出哪个位置上需要进行进位,然后左移表示将进位进到需进位的位置上;
2.处理进位的方法:将异或的结果与【与运算左移的结果】(即在哪个位置上进行了进位)进行下一轮的处理;
2.若进位为0则结束循环,返回计算结果;
整体下来的感觉就是:异或时(不进位的加法),将原本的数字做和结果的变小了,然后通过两个数的与运算将进位在添加上来,进行补充。

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;
    }
}