48、剑指offer--不用加减乘除做加法

题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
 
解题思路:例如5+17转化成二进制即为101+10001
1)不考虑进位101 + 10001 = 10100
2)进位1+1 = 10
3)相加10100+10 = 10110 =22
所以分别算不考虑进位和进位的相加即可,其中不考虑进位相当于异或操作0^0 = 0 0^1 = 1 1^0 = 1 1^1 =0,进位操作相当于先求&再左移1 1&1 = 1 1<<1 = 10
 1 class Solution {
 2 public:
 3     int Add(int num1, int num2)
 4     {
 5         int sum = 0;//不考虑进位和
 6         int carry = 0;//进位结果
 7         while(num2 != 0)//直到不产生进位结束循环
 8         {
 9             sum = num1^num2;
10             carry = (num1&num2)<<1;
11             num1 = sum;
12             num2 = carry;
13         }
14         return num1;
15     }
16 };
原文地址:https://www.cnblogs.com/qqky/p/7072984.html