剑指offer_12.31_Day_1

不用加减乘除做加法

题目描述

写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
 
  不用四则运算,必然是依靠位运算。
  位运算包括,与,或,异或,取反,左移,右移。
  分别为:
    与:& 两者都为1则1
    或:| 两者有1为1
    异或:^ 该位不同为1
    取反: ~ 1换成0 0换1
    左移 ,右移,<< >> 按位移动
  
  如果实现加法,比如6+11=17  也就是 0110 1011 异或的话,得出1101也就是 6+11不进位的情况,所以加上进位,也就是与运算,再左移一位,这样的话,就变成,不进位和进位的情况相加。
  那可以再次调用函数,直到,进位为0的时候。
  
 
   
class Solution {
public:int Add(num1,num2)
{
   while(num2!=0)
{
int temp=num1^num2;
num1=(num1&num2)<<1;
num2=temp;
}
return num1;
};
 
    
   
 
 
 

猜你喜欢

转载自www.cnblogs.com/kinstday/p/12127643.html