题目
写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。
解题思路
这题很绕,首先这里坑定要用到二进制的位运算,首先我们知道加法中是有进位计算的,这里也要用到, 首先如何出发进位运算, 这里用 << 1,表示进位,将当前位置左移一位, 然后就是如何触发进位运算,就是当做与运算的时候, 返回了1, 不存在进位的情况,最简单的算法使用异或,直接返回异或结果即可,这里代码将c和b当成了进位运算的变量, 最后的结果直接保存在了a中,简单注释
a ^ b // 计算出2个加数二进制下每一位的本位
a & b // 计算出2个加数二进制下每一位的进位
(a & b) << 1 // 进位做进位逻辑,也就是 * 2具体
Java代码实现
public class Add {
public int add(int a, int b) {
while(b != 0){
int c = (a & b) << 1;
a = a^b;
b = c;
}
return a ;
}
}