• Java 位运算实现加减乘除


    Java 位运算实现加减乘除

    一 分析

    a=13;

    b=9;

    a的二进制:1101

    b的二进制:1001

    1.加法

    不考虑进制加: 结果等于0100 等同于 a^b

    考虑进制加:结果等于10110 等同于 (a&b)>>1

    使用while循环或者递归方式,直到进制位等于0

    2.减法

    a-b == a+(-b),所以只需要计算a的负数,调用加法即可

    -b = ~b+1;(负数存储是以补码形式存储,补码=反码+1)

    -b 的二进制:10111

    3.乘法

    参考

    1201066-20190215101820443-747941214.png

    a*b:从乘数(b开始)的低位开始,如果当前位等于1,把当前被乘数左移当前位在乘数的位数,遍历乘数的每一位,直到遍历完成,遍历完成后,将每次的结果相加即可

    4.除法

    a/b 翻译过来就是求a由多少个b组成,所以通过循环方式或者递归方式使用a-b 即可,记录次数,这个次数就是商

    二 代码实现

    package org.jake.operation.four.arithmetic;
    
    public class Main {
        public static void main(String[] args) {
            System.out.println(division(8, 5));
        }
    
        private static int add(int a, int b) {
            if (b == 0) return a;
            int carry = (a & b) << 1;
            a = a ^ b;
            return add(a, carry);
        }
    
        private static int add2(int a, int b) {
            int carry;
            while (b != 0) {
                carry = a * b << 1;
                a =            a ^ b;
                b = carry;
            }
            return a;
        }
    
        private static int subtraction(int a, int b) {
            b = ~b + 1;
            return add(a, b);
        }
    
        private static int mul(int a, int b) {
            int i = 0;
            int res = 0;
            while (b != 0) {
                if ((b & 1) == 1) {
                    res += (a << i);
                }
                b = b >> 1;
                i++;
            }
            return res;
        }
    
        public static int division(int a, int b) {
            if (a < b) return 0;
            return division(subtraction(a, b), b) + 1;
        }
    
    }
    
    

    代码参考github operations-four-arithmetic分之

  • 相关阅读:
    数组去重
    css盒模型
    px、em、rem的区别
    Html5新标签
    弹性布局
    相对定位与绝对定位
    Hadoop综合大作业
    分布式文件系统HDFS 练习
    安装Hadoop
    爬虫综合大作业
  • 原文地址:https://www.cnblogs.com/jakaBlog/p/12205729.html
Copyright © 2020-2023  润新知