不用加减乘除做加法
题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
不用四则运算,必然是依靠位运算。
位运算包括,与,或,异或,取反,左移,右移。
分别为:
与:& 两者都为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; };