Java 位运算详解

Java 位运算详解目录一 Java 中支持的位运算二 位运算规则三 逻辑运算 一 与运算 amp 一 运算规则 二 运算流程 二 或运算 一 运算规则 二 运算流程 三 异或运算 一 运算规则 二 运算流程 四 取反运算 一 运算规则 二 运算规则四 位移操作 一 左移 lt lt 二 右移 gt gt 三 无符号右移 gt gt gt 一 Java 中支

目录

一、Java中支持的位运算

二、位运算规则

三、逻辑运算

(一)、与运算(&)

  一、运算规则

  二、运算流程

(二)、或运算(|)

  一、运算规则

  二、运算流程

(三)、异或运算(^)

  一、运算规则

   二、运算流程

(四)、取反运算(~)

  一、运算规则

  二、运算规则

四、位移操作

  (一)、左移(<<)

  (二)、右移(>>)

  (三)、无符号右移(>>>)


一、Java中支持的位运算

  1. 位与(&):二元运算符,两个为1时结果为1,否则为0
  2. 位或(|):二元运算符,两个其中有一个为1时结果就为1,否则为0
  3. 位异或(^):二元运算符,两个数同时为1或0时结果为1,否则为0
  4. 位取非(~):一元运算符,取反操作
  5. 左移(<<):一元运算符,按位左移一定的位置。高位溢出,低位补符号位,符号位不变。
  6. 右移(>>):一元运算符,按位右移一定的位置。高位补符号位,符号位不变,低位溢出。
  7. 无符号右移(>>>):一元运算符,符号位(即最高位)保留,其它位置向右移动,高位补零,低位溢出。

二、位运算规则

  Java数值运算过程中都是先将十进制转换为二进制然后再进行运算,再把二进制数据转换为十进制展现给用户。二进制运算规则如下:

  对于有符号的而言,

  • 最高位为符号位,0表示正数,1表示负数
  • 正数的原码,反码和补码都一样,三码合一
  • 负数的反码:符号位保持不限,其他位取反
  • 负数的补码:补码 + 1

  • 0的反码和补码都是0
  • 计算机的运算的时候,都是将原码转成补码进行运算

  下面以 -1 为例子展示原码、反码和补码的转换关系(以int数据类型为例,int类型在Java中占4字节):

  

Java 位运算详解

三、逻辑运算

(一)、与运算(&)

  一、运算规则

    两个数相同位置的比特进行与运算,若两个位置均为1,那么结果就为1,否者为0

Java 位运算详解

  二、运算流程

  以 4 & -5 = 0为例子展示运算流程:

  1. 因为4为正数,所以原码和补码相同,即4的补码为:00000000 0000000 00000000 00000100

  2.因为-5为负数,所以需要进行原码 >>> 反码 >>> 补码的转换

    1)原码: 00000000 00000000 00000101

    2)反码:

    3)补码:

  3.将4和-5的补码进行 & 运算:00000000 0000000 00000000 00000100

                            &

               00000000 00000000 00000000 00000000

  4.得到的补码结果为:00000000 00000000 00000000 00000000。所以结果为0

(二)、或运算(|)

  一、运算规则

    两个数相同位置的比特进行或运算,若其中一个为1则结果为1,否个结果为0。

Java 位运算详解

  二、运算流程

  以 -2 | 5 = -1为例展示运算流程:

  1.-2为负数,需要进行原码 > 反码 > 补码的转换。转换步骤如下: 

    1)原码: 00000000 00000000 00000010

    2)符号位不变,其他位置取反得反码:

    3)在反码的基础上+1得到补码: 

  2.5为正数,补码和反码一致,所以5的补码为:00000000 00000000 00000000 00000101

  3.将-2 和 5 的补码进行或运算:

               |    00000000 00000000 00000000 00000101 

                 

  4.根据上面的运算得到补码结果为:

  5.结果显然是一个负数,而负数的补码和原码不一致,所以需要将补码结果转换为原码才能得到最终的结果

  6.补码转原码的过程是跟原码转补码相反的过程,具体过程如下:

    1)补码:

    2)补码 -1 得到反码:

    3)符号位不变,其他位置取反得: 00000000 00000000 00000001

  7.最终得到的原码结果为  00000000 00000000 00000001,转成十进制为 -1

(三)、异或运算(^)

  一、运算规则

    两个数相同位置的比特进行或运算,若两个数均为0或1,则结果为0,否者为1.

 

Java 位运算详解

   二、运算流程

    以 1 ^ -5 = 6 为例,具体运算流程如下:

    1.1的补码为:00000000 00000000 00000000 00000001

    2.-5的补码为: (可参考与运算给出的流程)

    3.两个补码运算:  

          00000000 00000000 00000000 00000001

        ^              

                      

    4.得到的补码结果为:          

    5.补码为负数,需要转换成原码:

      1)补码:          

      2)反码:          

      3)原码: 00000000 00000000 000000110

    6.由原码: 00000000 00000000 000000110,得出最终的时间结果为 -6.

(四)、取反运算(~)

  一、运算规则

    若位数为0,则取反后为1,若为1,取反后为0。

Java 位运算详解

  二、运算规则

    以~2 = -3为例运算流程如下:

    1.2的原码为:00000000 00000000 00000000 00000010

    2.2的补码跟原码一致也为:00000000 00000000 00000000 00000010

    3.取反:

    4.取反后的结果仍未补码,此时补码为负数,则需要转成原码

    5. – 1 得到反码:

    6.  符号位不变,其他位置取反得到原码为: 00000000 00000000 00000011

    7.   00000000 00000000 00000011 转成十进制结果为 -3

          

四、位移操作

  (一)、左移(<<)

    规则:符号位不变,高位溢出截断,低位补零。比如 -1 << 2 = -4 (为方便讲解,图示的补码为-1)

Java 位运算详解

  (二)、右移(>>)

    规则:符号位不变,低位溢出截断,高位用符号位填充。如:8 >> 2 = 2。

Java 位运算详解

  (三)、无符号右移(>>>)

    规则:高位填充0,低位溢出。如-1>>>1=

Java 位运算详解

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/209333.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 上午9:29
下一篇 2026年3月19日 上午9:30


相关推荐

  • EnterCriticalSection 和 LeaveCriticalSection[通俗易懂]

    EnterCriticalSection 和 LeaveCriticalSection[通俗易懂]EnterCriticalSection和LeaveCriticalSection是干嘛用的?多个线程操作相同的数据(内存块)时,一般是需要按顺序访问的,否则会引导数据错乱,无法控制数据,变成随机变量。为解决这个问题,就需要引入互斥变量,让每个线程都按顺序地访问变量。这两个函数就是实现这种功能的。作用域:不是针对于资源的,而是针对于不同线程间的代码段的什么是临界区:临界区是一种轻量级机制,在某一时…

    2026年2月3日
    4
  • PMF 培训[通俗易懂]

    PMF 培训[通俗易懂]IBM有一些很有名的培训,也很有效,真的是有立竿见影的效果.过去很长时间之后,可能不记得培训的那些细节,但是培训中传达的工作方式,能给你很大的影响.进公司后3个月的时候接受了第一个,有关customerfacing的,其实是为你提供了一个商务沟通的基本模式,现在培训的内容忘记了,但是这个模式还记得:调查-承诺-执行-反馈.一个有效的商务沟通,哪怕是和客户的一个电话,都需要艺…

    2022年6月22日
    38
  • 运维堡垒机是什么?有什么作用?

    运维堡垒机是什么?有什么作用?安全考虑 运维人员通常都会通过堡垒机 进行服务器的日常维护工作 运维堡垒机对运维维护人员的安全操作起着重要的审计和控制作用 在出现重大服务器操作事故时 能够快速有效的定位原因和责任人 运维堡垒机是什么 运维堡垒机是种具备强大防御功能和安全审计功能的服务器 基于跳板机理念 作为内外网络的个安全审计监测点 以达到把所有网站安全问题集中到某台服务器上解决

    2026年3月18日
    2
  • 2026实战指南:如何用 OpenClaw 彻底打通多平台会议信息孤岛?

    2026实战指南:如何用 OpenClaw 彻底打通多平台会议信息孤岛?

    2026年3月15日
    2
  • 3DES加密算法原理

    3DES加密算法原理

    2021年4月9日
    179
  • Pytest测试框架基础篇

    Pytest测试框架基础篇今天和大家分享一下 pytest 测试框架的基础篇 内容包括 了解 pytest 测试框架的特点 掌握 pytest 基本使用 掌握 pytest 常用的场景 掌握 pytest 运行参数和配置方法

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号