JZ48-不用加减乘除做加法
题目:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
解题思路:参考计算机组成原理,加法的实现,这里负数无需手动转成补码,考虑整数相加即可。
0101 (5)
0110 (6)
-----------------
0011 (5^6)取到当前去掉进位的结果
1000 (进位:5&6 << 1)取到当前都是1的位,左移一位相当于进位,再继续进行同样逻辑的加法
-----------------
1011
public class Solution {
public int Add(int num1,int num2) {
while (num2 != 0) {
// 找出都是1的位,用于进位
int temp = (num1 & num2) << 1;
//将对应都是1的位置0,1,0对应的位置1
num1 ^= num2;
num2 = temp;
}
return num1;
}
}