剑指offer 不用加减乘除做加法

用位运算模拟加法,num1+num2的加法结果可以分为两个部分,一部分为二进制位加法产生了进位的结果,另一部分是二进制位加法没产生进位的结果。

比如3+5,二进制011+101,产生进位的结果为最后一位1+1,进到倒数第二位,结果为010。没产生进位的是第1位0+1和第二位1+0,结果110。

 

 1 class Solution {
 2 public:
 3     int Add(int num1, int num2)
 4     {
 5         while(num1){//num1存加法的进位结果
 6             int temp=num2;
 7             num2=num1^num2;
 8             num1=(num1&temp)<<1;
 9         }
10         return num2;
11     }
12 };

 

你可能感兴趣的:(剑指offer 不用加减乘除做加法)