题目:
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
思路:
//十进制相加:5+7,个位是2,进位是1,十位上是0加上进位的1,十位上的结果是1*10=10
//个位的值加上十位上的值:2+10 = 12,百位上是0,所以5+7的结果就是12
//可以拆解成,不考虑进位的加法和计算进位的加法
//对于二进制来说,不考虑进位的加法是,异或运算,(相同为0,不同为1)
//只计算进位的加法是:按位与运算并左移1位
//5的二进制是101,7的二进制是111
//不考虑进位:101^111=010
//计算进位:101 & 111=101,左移1位,1010
// 不考虑进位:0010^1010=1000(上一轮的不考虑进位值^进位值)
// 计算进位:0010&1010=0010,左移1位,00100
// 不考虑进位:01000^00100=01100
// 计算进位:01000&00100=00000
//直到进位为0,得到最终值01100
public class Solution {
public int Add(int num1,int num2) {
while(num2 != 0){
int temp = num1 ^ num2;
num2 = (num1 & num2) << 1;
num1 = temp;
}
return num1;
}
}