题目:不使用加减乘除实现两个整数的加法。
分析:不适用加减乘除实现整数的加法很自然就考虑到使用位运算。
例子:5+17.
5的二进制是101,17的二进制是10001.第一步各位相加但是不计进位,得到结果10100(最后以为两个数字都是1,相加的结果是二进制10.这一步不计进位,因此结果依然是0);第二步,记下进位。在这个例子中只在最后以为相加时产生了进位,结果是10;第三步,把前两步的结果相加得到结果10110,转换成十进制是22.
代码:
package problem2;
/**
* @author Hutongling
*
* @time:2017年3月28日 下午10:35:36
*/
public class 不用加减乘除做加法 {
static int add(int a, int b) {
int sum = 0, carry = 0;
do {
sum = a ^ b;
carry = (a & b) << 1;//进位向左移动一位
a = sum;
b = carry;
} while (b != 0);
return a;
}
public static void main(String[] args) {
System.out.println(add(2, 5));
}
}
代码结果:
7