题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
C++
class Solution {
public:int Add(int num1, int num2){while(num2 != 0){int sum = num1 ^ num2;int carry = (num1 & num2) << 1;num1 = sum;num2 = carry;}return num1;}
};
思路:不用加减乘除,则使用位运算
^ :按位异或
&:按位与
<<i:左移i位,相当于乘上2的i次方
观察加法运算过程可发现,两位数加法A+B可以分成三步:
1. A ^ B 得到不包含进位的相加个位的值
2. (A&B)<< 1 得到进位值
3.重复上两步直到进位值为0,跳出循环
扩展:减法
减法相当于加上一个数的相反数,相反数可以通过所有位取反再加1得到