java用位运算实现加减

简介: java用位运算实现加减

前言

我们经常使用的加减乘除,我们所看到的只是表面的效果,那么加减乘除在底层究竟是怎么实现的?今天就让我们一探究竟.今天用位运算实现的加减乘除不使用任何的加减乘除符号.


一、常见位运算

1. &运算

&运算二进制每一位全1为1,否则为0

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

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

2. |运算

|运算二进制每一位有1为1,全0为0

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

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

3. ^运算

^运算二进制每一位不同为1,相同为0

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

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

4. ~运算

~运算是二进制每一位按位取反.

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

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

二、位运算实现加法

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

在这里插入图片描述
下来我们用位运算实现一下加法.
在这里插入图片描述
我们进行一次异或运算就相当于进行一次无进位加法,那这样也不能实现加法,那我们得想办法,实现进位的数值.
在这里插入图片描述
进行一次与运算,只有同时为1才为1,也当同时为1时,我们需要进位,所以我们进行与运算后进行左移一位的操作,即可得到进位后的数值.
在这里插入图片描述
我们对异或运算和与运算后左移一位的结果进行相加即可,但我们只能进行位运算,所以我们只能再次进行异或运算与与运算,直到云运算的结果为0时,我们的异或运算的结果即为加法的结果.

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 void main(String[] args) {
        System.out.println(bitAdd(1,2));
    }

在这里插入图片描述

三、位运算实现减法

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

在这里插入图片描述
下来我们用位运算实现一下减法.
在我们有了位运算实现加法的基础之后,我们的减法就变得简单了,a - b == a + ( -b ),所以我们只需要将b变为-b即可实现减法功能,但我们不能使用负号,那我们来用位运算来实现一下.
在这里插入图片描述

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

在这里插入图片描述
我们可以发现一个数取反与相反数差一,我们取反加一即可得到相反数.

public static void main(String[] args) {
        System.out.println(~3 + 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 bitSub(int a,int b) {
        return bitAdd(a,~b+1);
    }

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

在这里插入图片描述

目录
相关文章
|
5月前
|
编解码 算法 Java
Java中的位运算详解
Java中的位运算详解
|
6月前
|
算法 Java
Java数据结构与算法:位运算之位移操作
Java数据结构与算法:位运算之位移操作
|
6月前
|
算法 Java
Java数据结构与算法:位运算之与、或、异或运算
Java数据结构与算法:位运算之与、或、异或运算
|
7月前
|
算法 Java C++
【Java 刷题记录】位运算
【Java 刷题记录】位运算
55 2
|
7月前
|
Java 程序员 数据安全/隐私保护
Java中的位运算
Java中的位运算
47 0
|
7月前
|
存储 Java 数据安全/隐私保护
【Java探索之旅】运算符解密 位运算,移位运算
【Java探索之旅】运算符解密 位运算,移位运算
62 0
|
Java
Java 中位运算,原码,反码,补码的详解
Java 中位运算,原码,反码,补码的详解
109 0
|
人工智能 Java BI
【Java基础】位运算实现加减乘除
&:按位与,对应位都为 1 时结果为 1,否则为 0。 |:按位或,对应位有一个为 1 时结果为 1,否则为 0。 ^:按位异或,对应位不同时结果为 1,否则为 0。 ~:按位取反,将每一位取反。 <<:左移,将所有位向左移动指定的位数,右边补零。
98 0
|
7月前
|
Java
java位运算权限设计
java位运算权限设计
72 0
|
7月前
|
存储 NoSQL Java
Java位运算基础
Java位运算基础
58 0