解读JAVA中的位运算操作

 更新时间:2023年08月21日 17:11:16   作者:雨橄  
这篇文章主要介绍了JAVA中的位运算操作,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

1、名词解释

首先,位移运算仅针对整数,非整数不支持位移运算。

  • ①<<:左移操作符,低位补0。
  • ②>>:算数右移符,高位补符号位。
  • ③>>>:逻辑右移符,高位补0。

如果对byte、short类型移位,在移位运算前,它们会先被转成int类型,且返回值也是int类型。

如果对long类型移位,则返回值也是long。

2、正负数换算

在java中最高位表示符号位,最高位0代表正数,最高位1代表负数。

用byte数据类型举例,byte占据8个二进制位:

01111111    正数(127)
11111111    负数(-1)

负数的换算方法

已知最高位为1,符号位不变,将其它位取反,然后+1即可得出对应负数。

以byte类型为例:
11111111    先取反->    10000000    再加1->    10000001    得出结果->    -1
10001111    先取反->    11110000    再加1->    11110001    得出结果->    -113
10101010    先取反->    11010101    再加1->    11010110    得出结果->    -86
10000001    先取反->    11111110    再加1->    11111111    得出结果->    -127

已知十进制负数,如何算出二进制原码

符号位不变,将剩下二进制位-1,然后取反即可得出原二进制码。

以byte类型为例:
-1        二进制->    10000001    再减1->    10000000    再取反得出结果->    11111111
-113    二进制->    11110001    再减1->    11110000    再取反得出结果->    10001111
-86        二进制->    11010110    再减1->    11010101    再取反得出结果->    10101010
-127    二进制->    11111111    再减1->    11111110    再取反得出结果->    10000001

3、位移运算演示

因为1字节的byte进行位运算时,会被自动转成4字节的int再进行运算,我们这里直接使用int类型进行演示,方便解读。

  • 演示壹 100<<2=400

  • 演示贰 15>>2=3

  • 演示叁 1325400064<<2=1006632960

  • 演示肆 -1895825408>>2=-473956352

  • 演示伍 -1895825408<<2=1006632960

  • 演示陆 -1895825408>>>2=599785472

4、拓展

~:二进制取反运算。

  • 演示 ~79=-80

&:二进制与运算

  • 演示 75&(-100)=8

|:二进制或运算

  • 演示 75|(-100)=-33

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringBoot整合SpringSecurity实现JWT认证的项目实践

    SpringBoot整合SpringSecurity实现JWT认证的项目实践

    本文会通过创建SpringBoot项目整合SpringSecurity,实现完整的JWT认证机制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • Java多态成员访问的特点是什么?

    Java多态成员访问的特点是什么?

    在上一篇文章中介绍了方法重载和方法重写的区别,但是在多态情况下发现程序的执行结果和我们预期的不太一样,这篇将继续介绍多态场景下,Java成员访问的特点,需要的朋友可以参考下
    2021-06-06
  • Java开发学习 Java数组操作工具

    Java开发学习 Java数组操作工具

    这篇文章主要为大家详细介绍了自己编写的Java数组操作工具,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • 学习Java中Class类及其用法

    学习Java中Class类及其用法

    这篇文章分为三大部分,主要内容有Class类原理详解、用法及泛化,需要的朋友可以参考下
    2015-07-07
  • SpringBoot中实现加载远程配置的代码示例

    SpringBoot中实现加载远程配置的代码示例

    本文章将通过结合consul config来讲解在springboot中如何加载远程配置:通过consul config加载consul server中存储的配置,需要的朋友可以参考下
    2023-06-06
  • Java编程实现打印螺旋矩阵实例代码

    Java编程实现打印螺旋矩阵实例代码

    这篇文章主要介绍了Java编程实现打印螺旋矩阵实例代码,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • Mybatis 入参类型方式全面详解

    Mybatis 入参类型方式全面详解

    这篇文章主要为大家介绍了Mybatis入参的类型方式全面示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • 实例详解Java中ThreadLocal内存泄露

    实例详解Java中ThreadLocal内存泄露

    这一篇文章我们来分析一个Java中ThreadLocal内存泄露的案例。分析问题的过程比结果更重要,理论结合实际才能彻底分析出内存泄漏的原因。
    2016-08-08
  • 详解Java ArrayList类

    详解Java ArrayList类

    这篇文章主要介绍了Java ArrayList类的相关资料,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • IDEA上面搭建一个SpringBoot的web-mvc项目遇到的问题

    IDEA上面搭建一个SpringBoot的web-mvc项目遇到的问题

    这篇文章主要介绍了IDEA上面搭建一个SpringBoot的web-mvc项目遇到的问题小结,需要的朋友可以参考下
    2017-04-04

最新评论