Java实现不用加减乘除做加法
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
分析
首先可以看一下下面这张表
看得出来,无进位和与异或运算是相同的,进位和与运算是相同的,但是需要左移一位。
这样两个数字的二进制之和s=a+b就变成了:
1.无进位和:n=a^b,异或运算;
2.进位:c=a&b<<1,与运算后再左移一位;
和s=(无进位和)n+(进位)c
即s=a+b转化成了s=n+c,然后循环n和c,直到c=0,
此时s=n,return n;(这其中的原理挺复杂的,具体的原理可以看leetcode,个人觉得讲得挺详细)
代码
public class Solution{
public int Add(int num1, int num2){
int result = 0;//无进位和,做异或运算;
int carry = 0;//进位,做与运算后左移一位;
do{
result = num1 ^ num2;
carry = (num1 & num2) << 1;
num1 = result;
num2 = carry;
}while(carry != 0);
return result;
}
}