Java的位运算
目录
1 Java中支持的位运算
2 位运算规则
3 逻辑运算
3.1 与运算(&)
3.2 或运算(|)
3.3 异或运算(^)
3.3 取反运算(~)
4 位移操作
4.1 左移(<<)
4.2 右移(>>)
4.3 无符号右移(>>>)
1 Java中支持的位运算
位与(&):二元运算符,两个为1时结果为1,否则为0。
位或(|):二元运算符,两个其中有一个为1时结果就为1,否则为0。
位异或(^):二元运算符,两个数同时为1或0时结果为1,否则为0。
位取非(~):一元运算符,取反操作。
左移(<<):一元运算符,按位左移一定的位置。高位溢出,低位补符号位,符号位不变。
右移(>>):一元运算符,按位右移一定的位置。高位补符号位,符号位不变,低位溢出。
无符号右移(>>>):一元运算符,符号位(即最高位)保留,其它位置向右移动,高位补零,低位溢出。
2 位运算规则
Java数值运算过程中都是先将十进制转换为二进制然后再进行运算,再把二进制数据转换为十进制展现给用户。二进制运算规则如下:
对于有符号的而言,最高位为符号位,0表示正数,1表示负数。
正数的原码,反码和补码都一样,三码合一。
负数的反码:符号位保持不限,其他位取反,负数的补码:补码 + 1。
0的反码和补码都是0。
计算机的运算的时候,都是将原码转成补码进行运算的。
下面以 -1 为例子展示原码、反码和补码的转换关系(以int数据类型为例,int类型在Java中占4字节):

3 逻辑运算
3.1与运算(&)
3.1.1 运算规则
两个数相同位置的比特进行与运算,若两个位置均为1,那么结果就为1,否者为0。

3.1.2 运算流程
以 4 & -5 = 0为例子展示运算流程:
1. 因为4为正数,所以原码和补码相同,即4的补码为:00000000 0000000 00000000 00000100
2. 因为-5为负数,所以需要进行原码 >>> 反码 >>> 补码的转换
1)原码:10000000 00000000 00000000 00000101
2)反码:11111111 11111111 11111111 11111010
3)补码:11111111 11111111 11111111 11111011
3. 将4和-5的补码进行 & 运算:00000000 0000000 00000000 00000100
11111111 11111111 11111111 11111011 &
00000000 00000000 00000000 00000000
4. 得到的补码结果为:00000000 00000000 00000000 00000000。所以结果为0
3.2 或运算(|)
3.2.1 运算规则
两个数相同位置的比特进行或运算,若其中一个为1则结果为1,否个结果为0。

3.2.2 运算流程
以 -2 | 5 = -1为例展示运算流程:
1. -2为负数,需要进行原码 > 反码 > 补码的转换。转换步骤如下:
1)原码:10000000 00000000 00000000 00000010
2)符号位不变,其他位置取反得反码:11111111 11111111 11111111 11111101
3)在反码的基础上+1得到补码: 11111111 11111111 11111111 11111110
2. 5为正数,补码和反码一致,所以5的补码为:00000000 00000000 00000000 00000101
3. 将-2 和 5 的补码进行或运算: 11111111 11111111 11111111 11111110
| 00000000 00000000 00000000 00000101
11111111 11111111 11111111 11111111
4. 根据上面的运算得到补码结果为:11111111 11111111 11111111 11111111
5. 结果显然是一个负数,而负数的补码和原码不一致,所以需要将补码结果转换为原码才能得到最终的结果
6. 补码转原码的过程是跟原码转补码相反的过程,具体过程如下:
1)补码:11111111 11111111 11111111 11111111
2)补码 -1 得到反码:11111111 11111111 11111111 11111110
3)符号位不变,其他位置取反得:10000000 00000000 00000000 00000001
7. 最终得到的原码结果为 10000000 00000000 00000000 00000001,转成十进制为 -1
3.3 异或运算(^)
3.3.1 运算规则
两个数相同位置的比特进行或运算,若两个数均为0或1,则结果为0,否者为1.

3.3.2 运算流程
以 1 ^ -5 = 6 为例,具体运算流程如下:
1. 1的补码为:00000000 00000000 00000000 00000001
2. -5的补码为:11111111 11111111 11111111 11111011(可参考与运算给出的流程)
3. 两个补码运算:
00000000 00000000 00000000 00000001
^ 11111111 11111111 11111111 11111011
11111111 11111111 11111111 11111010
4. 得到的补码结果为:11111111 11111111 11111111 11111010
5. 补码为负数,需要转换成原码:
1)补码:11111111 11111111 11111111 11111010
2)反码:11111111 11111111 11111111 11111001
3)原码: 10000000 00000000 00000000 000000110
6. 由原码:10000000 00000000 00000000 000000110,得出最终的时间结果为 -6.
3.3 取反运算(~)
3.3.1 运算规则
若位数为0,则取反后为1,若为1,取反后为0。

3.3.2 运算流程
以~2 = -3为例运算流程如下:
1. 2的原码为:00000000 00000000 00000000 00000010
2. 的补码跟原码一致也为:00000000 00000000 00000000 00000010
3. 取反:111111111 11111111 11111111 11111101
4. 取反后的结果仍未补码,此时补码为负数,则需要转成原码
5. 11111111 11111111 11111111 11111101 - 1 得到反码:11111111 11111111 11111111 11111100
6. 11111111 11111111 11111111 11111100 符号位不变,其他位置取反得到原码为:10000000 00000000 00000000 00000011
7. 10000000 00000000 00000000 00000011 转成十进制结果为 -3
4 位移操作
4.1 左移(<<)
规则:符号位不变,高位溢出截断,低位补零。比如 -1 << 2 = -4 (为方便讲解,图示的补码为-1)

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

4.3 无符号右移(>>>)
规则:高位填充0,低位溢出。如-1>>>1=2147483647

相关文章:
Java的位运算
目录 1 Java中支持的位运算 2 位运算规则 3 逻辑运算 3.1 与运算(&) 3.2 或运算(|) 3.3 异或运算(^) 3.3 取反运算(~) 4 位移操作 4.1 左移(<<&#…...
FastDFS分布式文件存储
FastDFS文件上传 简介: 主要解决:大容量的文件存储和高并发访问的问题 论坛:https://bbs.chinaunix.net 下载网站:https://sourceforge.net/projects/fastdfs/files/ 安装参考:https://www.cnblogs.com/cxygg/p/1…...
Android的AAC架构
AAC Android Architecture Components的简称,是一套用来搭建具有生命周期感知架构的系列组件,在2017年 GoogleI/O大会上发布。 dependencies {def lifecycle_version "2.2.0"implementation "androidx.lifecycle:lifecycle-livedata-ktx…...
高功率激光切割中不良现象的排除技巧
高功率切割市场现状 随着激光行业的发展和下游产业需求的变化,高功率的激光切割设备已逐渐成为市场关注的热点。高功率激光切割凭着速度和厚度上无可比拟的优势,目前已获得了市场的广泛认可。 但由于高功率激光切割技术尚处于普及的初级阶段,…...
MySQL-----复合查询
文章目录 前言一、基本查询回顾二、 多表查询解决多表查询的思路 三、自连接四、子查询1. 单行子查询2. 多行子查询3. 多列子查询4. 在from子句中使用子查询5. 合并查询5.1 union5.2 unoin all 总结 前言 前面的学习中,对于mysql表的查询都是对一张表进行查询,在实际开发中这远…...
10.Yarn概述
如果说HDFS是存储,则Yarn就是cpu和内存,mapreduce就是程序。 1.基础架构 复习: 1.Container就是一个容器,其中封装了需要使用的内存与cpu 2.每当提交一个job,就会产生一个appMaster(总指挥),app Master负责其他container里面的…...
MFC实现背景透明,控件不透明的对话框,且点击图片有事件响应
最终成果:背景半透明、但是控件不透明的对话框。 对话框上用图片代表功能,当点击图片时,响应点击事件,弹出相对应的对话框。 对话框固定大小,不可放大缩小,以免影响图片的显示数量。 步骤一:背景…...
案例01-tlias智能学习辅助系统01-增删改查+参数传递
目录 1、需求说明:实现对部门表和员工表的增删改查 2、环境搭建 3、部门管理 3.1 查询部门 3.2 前后端联调 3.3 删除部门 3.4 新增部门 3.5 根据ID查询数据 3.5 修改部门 总结(Controller层参数接收): 4、员工管理 4.…...
Spring之Bean的配置与实例
Spring之Bean的配置与实例 一、Bean的基础配置1. Bean基础配置【重点】配置说明代码演示运行结果 2. Bean别名配置配置说明代码演示打印结果 3. Bean作用范围配置【重点】配置说明代码演示打印结果 二、Bean的实例化1. Bean是如何创建的2. 实例化Bean的三种方式2.1 构造方法方式…...
“不保留活动”打开,导致app返回前台崩溃问题解决
问题描述 不保留活动开关打开,把app切入后台,会导致当前展示的Activity被回收,切到前台后重建。 我们有个业务场景是,Activity里面有个ViewPager2,VP里面放Fragment,Fragment的展示需要在Activity中做一些…...
解读vue3源码(3)——watch
Vue3的watch底层源码主要是通过使用Proxy对象来实现的。在Vue3中,每个组件实例都会有一个watcher实例,用于监听组件数据的变化。当组件数据发生变化时,watcher实例会触发回调函数,从而更新组件的视图。 Vue3的watch底层源码主要涉…...
优秀简历的HR视角:怎样打造一份称心如意的简历?
简历的排版应该简洁工整,注重细节。需要注意对齐和标点符号的使用,因为在排版上的细节需要下很大功夫。除此之外,下面重点讲述几点简历内容需要注意的地方。 要点1:不相关的不要写。 尤其是与应聘岗位毫不相关的实习经历&#x…...
系统集成项目管理工程师——考试重点(三)项目管理一般知识
1.项目定义: 为达到特定的目的,使用一定资源,在确定的期间内,为特定发起人提供独特的产品、服务或成果而进行的一系列相互关联的活动的集合。 2.项目目标: 成果性目标:项目产品本身 约束性目标&…...
为什么医疗保健需要MFT来帮助保护EHR文件传输
毫无疑问,医疗保健行业需要EHR技术来处理患者,设施,提供者等之间的敏感患者信息。但是,如果没有安全的MFT解决方案,您将无法安全地传输患者文件,从而使您的运营面临遭受数据泄露,尴尬࿰…...
对项目总体把控不足,项目经理应该怎么办?
公司现状:项目人员紧缺,只有两人了解此项目技术细节,其中一个不常驻现场,另一个是执行项目经理李伟。 项目经理王博是公司元老,同时负责多个项目,工作比较忙,不常驻现场,没有参加过…...
【学习笔记】CF603E Pastoral Oddities
先不考虑数据结构部分,尝试猜一下结论。 结论:一个连通块有解当且仅当连通块的度数为偶数。 然后这题要你最大边权最小。最无脑的方法就是直接上 lct \text{lct} lct。真省事啊 我第一眼想到的还是整体二分。这玩意非常好写。 但是为什么也可以用线段…...
如何使用ESP32-CAM构建一个人脸识别系统
有许多人识别系统使用签名、指纹、语音、手部几何、人脸识别等来识别人,但除了人脸识别系统。 人脸识别系统不仅可以用于安全目的来识别公共场所的人员,还可以用于办公室和学校的考勤目的。 在这个项目中,我们将使用 ESP32-CAM 构建一个人脸识…...
JavaWeb分页条件查询参数特殊字符处理
问题背景 在项目开发过程中,基本都会有列表条件查询,例如用户管理会有通过用户姓名模糊查询用户,课程管理会有课程名称模糊查询课程等等。 而查询过程中如果用户在界面上输入一些特殊字符,例如:%_等等,这…...
ubuntu18服务安装
一、JDK安装 将jdk解压缩到该目录 /opt/ sudo tar -zxvf jdk-8u261-linux-x64.tar.gz -C /opt/ #重命名 cd /opt sudo mv jdk-8u261-linux-x64 jdk_8 修改环境变量 sudo vi ~/.bashrc #在文件最后追加以下文本 #进入编辑器后输入以下指令: #1. G //将光标移到最后一…...
这些使用工具大推荐,现在知道不晚
1.Snip Snip是一款截图软件,它突出的优点就是可以制作滚动截图。 例如:对整个网页进行截图,使用Snip即可轻松获取,无需处理水印。 2.Sleep Cycle 快节奏、高压力的生活导致我们越来越晚睡觉,睡眠质量越来越差。 想提…...
3步找回密码:如何用ArchivePasswordTestTool解锁加密压缩包
3步找回密码:如何用ArchivePasswordTestTool解锁加密压缩包 【免费下载链接】ArchivePasswordTestTool 利用7zip测试压缩包的功能 对加密压缩包进行自动化测试密码 项目地址: https://gitcode.com/gh_mirrors/ar/ArchivePasswordTestTool 你是否曾经面对一个…...
【Linux内核模块】模块的编译:从代码到可加载模块的 “变身术“
一、内核模块编译的特殊性:为什么不能直接用 gcc?普通 C 程序编译很简单,gcc hello.c -o hello就行,但内核模块可不行。这就像做面包和做蛋糕的区别 —— 虽然都是面粉做的,但烤箱温度、配料比例完全不同。1.1 内核模块…...
别再用鼠标了!树莓派新手必学的20个命令行操作,5分钟上手
别再用鼠标了!树莓派新手必学的20个命令行操作,5分钟上手 第一次打开树莓派的终端时,那个闪烁的光标是不是让你想起了90年代的黑客电影?别担心,命令行不是程序员的专属工具。就像学骑自行车前总要拆掉辅助轮࿰…...
PPTist:零基础打造专业级在线演示文稿的完整指南
PPTist:零基础打造专业级在线演示文稿的完整指南 【免费下载链接】PPTist PowerPoint-ist(/pauəpɔintist/), An online presentation application that replicates most of the commonly used features of MS PowerPoint, allowing for the…...
Windows RTMP流媒体服务器搭建完整指南:nginx-rtmp-win32终极教程
Windows RTMP流媒体服务器搭建完整指南:nginx-rtmp-win32终极教程 【免费下载链接】nginx-rtmp-win32 Nginx-rtmp-module Windows builds. 项目地址: https://gitcode.com/gh_mirrors/ng/nginx-rtmp-win32 想要在Windows系统上快速搭建自己的RTMP直播服务器…...
AIDD入门第七课:大语言模型是如何读懂文字,又如何走进药物发现的?
前几篇文章中,我们已经介绍了机器学习、深度学习、神经网络,以及CNN、RNN、Transformer等经典结构。今天这篇文章,进入一个更靠近当下AI浪潮的主题:大语言模型与自然语言处理。自然语言处理(Natural Language Processi…...
告别BMC踩坑:手把手教你用U盘给IBM/Lenovo x3650 M5装系统(含JRE报错解决方案)
企业级服务器系统部署实战:IBM/Lenovo x3650 M5的U盘安装全指南 当面对一台崭新的IBM/Lenovo x3650 M5服务器时,许多IT运维人员都会遇到系统部署的挑战。虽然官方文档通常推荐通过BMC/IMM远程管理接口进行安装,但现实操作中,Java…...
2026年实用降AIGC软件:亲测AI率从90%降至4%的靠谱方案
一、前言:2026年毕业必过AIGC检测门槛 2026年国内高校对学术论文的AIGC疑似度审核全面收紧,绝大多数院校都发布了明确的AIGC检测数值要求:985、211院校规定本科论文AI率需低于20%,硕士论文AI率不得高于15%,普通高校也普…...
技术从业者的简历优化:如何写出让HR眼前一亮的简历
一、精准匹配:用关键词敲开面试大门在HR筛选简历的“黄金30秒”里,关键词匹配度是第一门槛。对于软件测试从业者来说,精准对接岗位JD(职位描述)中的核心关键词,是让简历脱颖而出的第一步。首先,…...
ViGEmBus:让Windows游戏外设兼容性不再是难题
ViGEmBus:让Windows游戏外设兼容性不再是难题 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 你是否曾经遇到过心爱的游戏手柄在Windows上无法被…...
