解读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

总结

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

相关文章

  • Java经典排序算法之冒泡排序代码实例

    Java经典排序算法之冒泡排序代码实例

    这篇文章主要介绍了Java经典排序算法之冒泡排序代码实例,相邻两元素进行比较,如过左侧元素大于右侧元素,则进行交换,每完成一次循环就将最大元素排在最后,下一次循环是将其它的数进行类似操作,需要的朋友可以参考下
    2023-11-11
  • Mybatis-Plus自动填充的实现示例

    Mybatis-Plus自动填充的实现示例

    这篇文章主要介绍了Mybatis-Plus自动填充的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • java新人基础入门之递归调用

    java新人基础入门之递归调用

    这篇文章主要给大家介绍了关于java新人基础入门之递归调用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • IntelliJ IDEA配置Maven阿里云镜像加速源的全流程

    IntelliJ IDEA配置Maven阿里云镜像加速源的全流程

    国内网络访问 Maven 中央仓库经常超时、依赖下载极慢或失败,配置阿里云等国内镜像后,Java 项目依赖下载飞快,极大提升开发效率,是中国开发者必做优化,本文就给大家介绍了IntelliJ IDEA配置Maven阿里云镜像加速源的全流程,需要的朋友可以参考下
    2025-09-09
  • java设计模式责任链模式原理案例详解

    java设计模式责任链模式原理案例详解

    一个事件需要经过多个对象处理是一个挺常见的场景,譬如采购审批流程,请假流程,软件开发中的异常处理流程,web请求处理流程等各种各样的流程,可以考虑使用责任链模式来实现
    2021-09-09
  • Java命令行参数解析工具jcommander详解

    Java命令行参数解析工具jcommander详解

    这篇文章主要为大家介绍了Java命令行参数解析工具jcommander命令详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • 基于Java的Socket多客户端Client-Server聊天程序的实现

    基于Java的Socket多客户端Client-Server聊天程序的实现

    这篇文章主要介绍了基于Java的Socket多客户端Client-Server聊天程序的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Java并发编程中的ConcurrentLinkedQueue详解

    Java并发编程中的ConcurrentLinkedQueue详解

    这篇文章主要介绍了Java并发编程中的ConcurrentLinkedQueue详解,GetThread线程不会因为ConcurrentLinkedQueue队列为空而等待,而是直接返回null,所以当实现队列不空时,等待时,则需要用户自己实现等待逻辑,需要的朋友可以参考下
    2023-12-12
  • Java MyBatis本地缓存原理详解

    Java MyBatis本地缓存原理详解

    这篇文章主要介绍了Java MyBatis本地缓存原理详解,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-07-07
  • 关于Java日期工具类的编写

    关于Java日期工具类的编写

    这篇文章主要介绍了关于Java日期工具类的编写,在Java开发中,经常会遇到处理日期相关的数据,那么今天我们来自己写一个工具类,文中有详细的实例代码以及实现思路,需要的朋友可以参考下
    2023-05-05

最新评论