题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
解题思路
- 十进制运算做法,例如5+17,第一步:相加各位的值,不算进位,得到12;第二步:计算进位值得到10;第三步重复前两步,相加的值变为上两步得到的结果12和10,得到22。
- 二进制模仿十进制做法,第一步,二进制异或(各位相同为0,不同为1)操作(相当于各位相加不进位)得到各位相加的值,即00101^10001=10100;第二步,二进制与操作(两个数都为1,则为1,否则为0)各位并左移得到进制位,即(00101&10001)<<1=00010得到进制位;对上两步得到的值重复操作,10100 ^ 00010=10110,(10100&00010)<<1=0;当进位部分为0的时候返回第一步异或操作结果。
代码实现
function Add(num1, num2)
{
// write code here
while(num2!=0){
let temp = num1^num2; //异或求相加不进位部分
num2 = (num1&num2)<<1;//与操作后左移一位求进位分布
num1=temp;
}
return num1;
}