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));
    }

在这里插入图片描述

目录
相关文章
|
4月前
|
Java
Java 运算符详解(取模、位运算、运算符的执行顺序)
Java 运算符详解(取模、位运算、运算符的执行顺序)
53 0
|
11天前
|
存储 Java 数据安全/隐私保护
【Java探索之旅】运算符解密 位运算,移位运算
【Java探索之旅】运算符解密 位运算,移位运算
20 0
|
9月前
|
Java
Java 中位运算,原码,反码,补码的详解
Java 中位运算,原码,反码,补码的详解
75 0
|
9月前
|
人工智能 Java BI
【Java基础】位运算实现加减乘除
&:按位与,对应位都为 1 时结果为 1,否则为 0。 |:按位或,对应位有一个为 1 时结果为 1,否则为 0。 ^:按位异或,对应位不同时结果为 1,否则为 0。 ~:按位取反,将每一位取反。 <<:左移,将所有位向左移动指定的位数,右边补零。
68 0
|
5月前
|
Java
java位运算权限设计
java位运算权限设计
28 0
|
5月前
|
存储 NoSQL Java
Java位运算基础
Java位运算基础
37 0
|
8月前
|
Java
Java 中对日期进行加减操作
Java 中对日期进行加减操作
38 0
|
Java
Java 实现汉字按照首字母分组排序
Java 实现汉字按照首字母分组排序
570 0
|
9月前
|
架构师 Java
231. 2 的幂 136. 只出现一次的数字(Java) 位运算(Java) Leecode
231. 2 的幂 136. 只出现一次的数字(Java) 位运算(Java) Leecode
40 0
|
10月前
|
前端开发 Java
项目采坑日志——Java浮点类型数据进行加减运算出现精度丢失问题
项目采坑日志——Java浮点类型数据进行加减运算出现精度丢失问题
119 0