不用加减乘除做加法
题目:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
分析:不用加减乘除那就剩下位运算,先不考虑进位两个二进制数的相加,相当于相异为1,相同为0,和异或操作,那么第一步可以用异或得到。再考虑进位,只有在1+1的时候,才会向前进位,与运算然后向后向左移一位即可得到。然后将二者再相加就是结果,如果还有进位,就不断的相加直到不再产生进位则计算结束。另外这是典型的do while结构例子,无论如何先做一次循环。
public class Solution {
public int Add(int num1,int num2) {
int sum = 0;
int carry = 0;
do {
sum = num1 ^ num2;
carry = (num1 & num2) << 1;
num1 = sum;
num2 = carry;
}
while(num2 != 0);
return sum;
}
}