题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
解题思路:
不可以使用加减运算符,那么就要想到使用位运算解决加法操作。
分为两个步骤,一个是无进位相加结果,另一个是进位相加的二进制结果,类似于整数相加结果的余数,但是应该向左位移一位,因为进位只对前面的位数有影响。对于负数而言,引入了反码和补码的概念,减去一个数,相当于加上一个数的负数,因为计算机中只提供了加法的运算,代码如下:
public class Solution {
public int Add(int num1,int num2) {
if(num2 == 0) return num1 ;
else if(num1 == 0) return num2 ;
if(num1==0 && num2==0) return 0 ;
while(num2 != 0) {
int tmp = (num1 & num2) << 1; // 得到进位的二进制结果
num1 ^= num2 ; // 得到无进位相加的结果
num2 = tmp ;
}
return num1 ;
}
}