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;
    }
}
posted @ 2021-10-11 16:04  immortal_mode  阅读(281)  评论(0)    收藏  举报