其他分享
首页 > 其他分享> > 剑指offer_12.31_Day_1

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

 

 

 

   

标签:num1,num2,offer,12.31,左移,取反,异或,Day,进位
来源: https://www.cnblogs.com/kinstday/p/12127643.html