java用位运算实现乘除

简介: java用位运算实现乘除

一、位运算实现乘法

public static void main(String[] args) {
        int a = 1;
        int b = 3;
        System.out.println(a * b);
    }

在这里插入图片描述
我们小学的时候是怎么进行乘法的,按位相乘,每一位和每一位相乘.
在这里插入图片描述
二进制中也是一样的,按位相乘,如果被乘数二进制位是1则与乘数相乘.每次运算进行移位
在这里插入图片描述

public static int bitAdd(int a,int b) {
        int sum = 0;
        while(b != 0) {
            sum = a ^ b;
            b = (a & b) << 1;
            a = sum;
        }
        return sum;
    }
    public static int bitMul(int a,int b) {
        int sum = 0;
        while(b != 0) {
            if((b & 1) != 0) {
                sum += a;
            }
            a <<= 1;
            b >>>= 1;
        }
        return sum;
    }

    public static void main(String[] args) {
        System.out.println(bitMul(1,3));
    }

在这里插入图片描述

二、位运算实现除法

public static void main(String[] args) {
        int a = 7;
        int b = 2;
        System.out.println(a / b);
    }

在这里插入图片描述
我们在用位运算实现除法时,采用逆推的方式,a / b = c,
a = c * b。

在这里插入图片描述
我们只需要求出a减去b向左的移位,只要满足a <= b的移位即可,每次移动多少位即a / b的结果二进制中某一位为1,以此循环倒推即可.

在这里插入图片描述
在这里插入图片描述

public static int bitAdd(int a,int b) {
        int sum = 0;
        while(b != 0) {
            sum = a ^ b;
            b = (a & b) << 1;
            a = sum;
        }
        return sum;
    }
    public static int negNum(int n) {
        //转化为相反数
        return bitAdd(~n,1);
    }
    public static int minus(int a,int b) {
        //实现两个数相减
        return bitAdd(a,negNum(b));
    }
    public static boolean isNeg(int n) {
        //判断是否为负数
        return n < 0;
    }
    public static int bitDiv(int a,int b) {
        int x = isNeg(a) ? negNum(a) : a;
        int y = isNeg(b) ? negNum(b) : b;
        int res = 0;
        for (int i = 30; i >= 0 ; i = minus(i,1)) {
            if((x >> i) >= y) {
                res |= (1 << i);
                x = minus(x,y << i);
            }
        }
        return isNeg(a) != isNeg(b) ? negNum(res) : res;

    }

    public static void main(String[] args) {
        int a = 7;
        int b = 2;
        System.out.println(bitDiv(a,b));
    }

在这里插入图片描述

目录
相关文章
|
8月前
|
Java
Java不用加减乘除做加法(图文详解)
1.题目描述 2.题解 分析 具体实现
41 0
|
11天前
|
算法 Java C++
【Java 刷题记录】位运算
【Java 刷题记录】位运算
23 2
|
11天前
|
Java
Java 运算符详解(取模、位运算、运算符的执行顺序)
Java 运算符详解(取模、位运算、运算符的执行顺序)
54 0
|
11天前
|
存储 Java 数据安全/隐私保护
【Java探索之旅】运算符解密 位运算,移位运算
【Java探索之旅】运算符解密 位运算,移位运算
25 0
|
11天前
|
数据可视化 小程序 Java
【Java】——实现可视化加减乘除计算器
【Java】——实现可视化加减乘除计算器
45 0
【Java】——实现可视化加减乘除计算器
|
9月前
|
Java
Java 中位运算,原码,反码,补码的详解
Java 中位运算,原码,反码,补码的详解
78 0
|
9月前
|
人工智能 Java BI
【Java基础】位运算实现加减乘除
&:按位与,对应位都为 1 时结果为 1,否则为 0。 |:按位或,对应位有一个为 1 时结果为 1,否则为 0。 ^:按位异或,对应位不同时结果为 1,否则为 0。 ~:按位取反,将每一位取反。 <<:左移,将所有位向左移动指定的位数,右边补零。
69 0
|
11天前
|
Java
java位运算权限设计
java位运算权限设计
29 0
|
11天前
|
存储 NoSQL Java
Java位运算基础
Java位运算基础
39 0
|
9月前
|
存储 Java
Java中-BigDecimal类型如何进行加减乘除运算?
Java中-BigDecimal类型如何进行加减乘除运算
70 0