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分之

  • 相关阅读:
    Qt之数据类型转换
    [leetcode] Sudoku Solver
    调用摄像头拍照实例,摇一摇实例
    html 标签
    JavaScript 常见的六种继承方式
    js的DOM的方法和属性总结
    BOM属性方法。
    DOM 元素对象的属性方法
    完整的用户代理字符串检测
    可以跨浏览器获得窗口左边,和上边的位置
  • 原文地址:https://www.cnblogs.com/jakaBlog/p/12205729.html
Copyright © 2011-2022 走看看