java 用二进制实现两个数的加法

2016-07-08  本文已影响2287人  筱南独舞

*关于Java位运算可以参考之前的这篇文章: * http://www.jianshu.com/p/6a181eb2bbcd

比如:求3与5的和,这里我们用二进制的位运算实现

思路是这样的:

3转为二进制为0011
5转为二进制为0101
给定的数转成二进制后:

  1. (位异或^)如果相同位不同则为1,相同位相同则为0:目的是将相加后不需要进位的取出;
  2. (位与&)如果相同位为1,则为1,相同位为0则为零,(<<1)然后左移1位:目的是将相加后需要进位的单独取出;
  3. 重复以上2步,直到其中一方全为0,输出结果即可。

具体代码入下:

public class MyClass {
  public static void main(String[] s) {
    int i = add(-3, -1);
    System.out.println(i); 
  }

  public static int add(int x, int y) {
    if (y == 0) return x;
    int sum, carry;
    sum = x ^ y;
    carry = (x & y) << 1;
    return add(sum, carry);
  }
}
模拟:

第一次计算后:sum = 6 (0110) , carry = 2 (0010);
第二次计算后:sum = 4 (0100) , carry = 4 (0100);
第三次计算后:sum = 0 (0000) , carry = 8 (1000);
第四次计算后:sum = 8 (1000) , carry = 0 (0000);
第五次输入结果8;

上一篇 下一篇

猜你喜欢

热点阅读