写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。函数
C++code
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; } };
思路:不用加减乘除,则使用位运算io
^ :按位异或class
&:按位与扩展
<<i:左移i位,至关于乘上2的i次方循环
观察加法运算过程可发现,两位数加法A+B能够分红三步:while
1. A ^ B 获得不包含进位的相加个位的值co
2. (A&B)<< 1 获得进位值位运算
3.重复上两步直到进位值为0,跳出循环运算符
扩展:减法
减法至关于加上一个数的相反数,相反数能够经过全部位取反再加1获得