Java 位运算实现加减乘除


1、加法


// 加法运算
    public static int add(int a, int b) {
          
   
        /*
            实现原理:
                不考虑进位结果: a ^ b
                只考虑进位结果: (a & b) << 1
                然后上述两个结果继续运算,直到进位为 0
         */
        int x = a;
        int y = b;
        while (y != 0) {
          
   
            x = a ^ b;
            y = (a & b) << 1;
            a = x;
            b = y;
        }

        return a;
    }

    // 加法运算的递归实现
    public static int addRecursion(int a, int b) {
          
   

        if (((a & b) << 1) == 0)
            return a ^ b;
        else
            return addRecursion(a ^ b, ((a & b) << 1));
    }

2、减法


/*
        减法:计算机中,减法实际上是减数加上被减数的补码 (补码 = 反码 + 1)
        a - b = a + (~b + 1) = a + ~b + 1
     */
    public static int subtraction(int a, int b) {
          
   
        return add(a, ~b + 1);
    }

3、乘法


/*
        二进制乘法原理:
            从乘数低位到高位,遇到 1 并且这个 1 在乘数的右起第 i (i 从 0 开始)位,
            那么就把 被乘数 左移 i 位得到 temp_i。直到乘数中的 1 遍历完后,把上面被乘数
            左移得到的 temp_i 相加起来得到乘法结果
     */
	public static int multiplication(int a, int b) {
          
   
        int i = 0;
        int res = 0;
        // 乘数不为 0
        while (b != 0) {
          
   
            // 处理当前位
            // 如果当前位是 1
            if ((b & 1) == 1) {
          
   
                res += (a << i);
                b = b >> 1;
                i++;
            } else {
          
   
                // 当前位是 0
                b = b >> 1;
                i++;
            }
        }
        return res;
    }

4、除法


/*
        除法可以换成 减法 来实现
     */
    public static int division(int a, int b) {
          
   
        int res;
        if (a < b) {
          
   
            return 0;
        } else {
          
   
            res = division(subtraction(a, b), b) + 1;
        }

        return res;
    }
经验分享 程序员 微信小程序 职场和发展