Java位运算实现加法
Java位运算实现加法
参数 1000,2000
0000 0000 0000 0000 0000 0011 1110 1000 1000
0000 0000 0000 0000 0000 0111 1101 0000 2000
先进行& 操作判定是否有进位
0000 0000 0000 0000 0000 0011 1100 0000 & 操作
有进位左移一位
0000 0000 0000 0000 0000 0111 1000 0000 << 1 carryBit
参数 1000,2000
0000 0000 0000 0000 0000 0011 1110 1000 1000
0000 0000 0000 0000 0000 0111 1101 0000 2000
在将两个值进行^ 异或运算
0000 0000 0000 0000 0000 0100 0011 1000 ^ 异或 result
0000 0000 0000 0000 0000 0111 1000 0000 carryBit
0000 0000 0000 0000 0000 0100 0011 1000 result
将进位和异或后的值进行& 操作判断是否还有进位,没有返回,有的话继续递归
0000 0000 0000 0000 0000 0100 0000 0000 & 操作
0000 0000 0000 0000 0000 1000 0000 0000 << 1 carryBit
0000 0000 0000 0000 0000 0111 1000 0000 carryBit
0000 0000 0000 0000 0000 0100 0011 1000 result
在将两个值进行^ 异或运算
0000 0000 0000 0000 0000 0011 1011 1000 ^ 异或 result
将进位和异或后的值进行& 操作判断是否还有进位,没有返回,有的话继续递归
0000 0000 0000 0000 0000 0011 1011 1000 result
0000 0000 0000 0000 0000 1000 0000 0000 carryBit
0000 0000 0000 0000 0000 1011 1011 1000 ^ 异或 result
java 代码实现
/**
* @author: Mikael
**/
public class Client {
public static void main(String[] args) {
System.out.println(recursion(1024, 1024));
}
// 递归
public static int recursion(int i, int j) {
// 0000 0000 0000 0000 0000 0000 0000 0101 5
// 0000 0000 0000 0000 0000 0000 0000 0101 5
//& 0000 0000 0000 0000 0000 0000 0000 0101 5
//& 可以用来计算两个数进行相加有无进位
int carryBit = (i & j) << 1;
// 0000 0000 0000 0000 0000 0000 0000 0101 5
// 0000 0000 0000 0000 0000 0000 0000 0101 5
//^ 0000 0000 0000 0000 0000 0000 0000 0000 0
//^ 异或可以用来计算两个数的加法不考虑进位
int result = i ^ j;
if (carryBit != 0){
return recursion(result,carryBit);
}
return result;
}
}

浙公网安备 33010602011771号