zoukankan      html  css  js  c++  java
  • 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分之

  • 相关阅读:
    Html禁止粘贴 复制 剪切
    表单标签
    自构BeanHandler(用BeansUtils)
    spring配置中引入properties
    How Subcontracting Cockpit ME2ON creates SD delivery?
    cascadia code一款很好看的微软字体
    How condition value calculated in sap
    Code in SAP query
    SO Pricing not updated for partial billing items
    Javascript learning
  • 原文地址:https://www.cnblogs.com/jakaBlog/p/12205729.html
Copyright © 2011-2022 走看看