*关于Java位运算可以参考之前的这篇文章: * //www.greatytc.com/p/6a181eb2bbcd
比如:求3与5的和,这里我们用二进制的位运算实现
思路是这样的:
3转为二进制为0011
5转为二进制为0101
给定的数转成二进制后:
- (位异或^)如果相同位不同则为1,相同位相同则为0:目的是将相加后不需要进位的取出;
- (位与&)如果相同位为1,则为1,相同位为0则为零,(<<1)然后左移1位:目的是将相加后需要进位的单独取出;
- 重复以上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;