1.将两个二进制数相加看作不算进位的单纯相加和sum1和进位sum2相加的结果,保证sum1和sum2的进位为0。
2.sum1, sum2进位不为0的话就得再来一遍,直到进位=0.
3.不算进位就是0+0+0;0+1=1;1+0=1;1+1=0,也就是异或的结果——相同为0,不同为1。
4.进位就是两个数相与然后左移一位,因为只有1和1相与才会得到1,然后左移一位表示该位有进位,加在之前没算进位的数上就是两数和。
5.最后无进位num2=0, sum1就是num1, sum2就是num2=0,所以返回num1即可。
int Add(int num1, int num2 ) { while(num2 != 0){ //直到进位为0,即不进位,就可以直接 int temp = num1 ^ num2; //不算进位相加和,即异或运算 num2 = (num1 & num2) <<1; //只看进位,即与运算,然后左移一位 num1 = temp; //借助临时变量temp更新num1,再进行num1和num2的位运算 } return num1; }