1.题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
2.解题思路
-
利用&、|、^等运算
- (1)定义一个sum和一个进位位carry,sum用来记录二进制的两位数无进位相加得到的值(num1^num2),进位位carry用来记录需要向哪个位进位(num&num2<<1)
- (2)将得到的sum和carry重新赋值给num1和num2.循环的结束条件是进位位为0时终止。
3.代码
public class Solution {
public int Add(int num1,int num2) {
int carry = 0;
int sum = 0;
do{
//异或,相同为0不同为1 ,得到的结果相当于二进制的两个数无进位相加,
//相加为2的结果是0.如6和12相异或,即(0110^1100) = 1010
sum = num1 ^ num2;
//num1&num2得到该位数需要进位,即向前进位<<1
carry = (num1&num2)<<1;
num1 = sum;
num2 = carry;
}while(num2!=0); //直到无进位结束
return num1;
}
}