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

总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
IntelliJ IDEA配置Maven阿里云镜像加速源的全流程
国内网络访问 Maven 中央仓库经常超时、依赖下载极慢或失败,配置阿里云等国内镜像后,Java 项目依赖下载飞快,极大提升开发效率,是中国开发者必做优化,本文就给大家介绍了IntelliJ IDEA配置Maven阿里云镜像加速源的全流程,需要的朋友可以参考下2025-09-09
基于Java的Socket多客户端Client-Server聊天程序的实现
这篇文章主要介绍了基于Java的Socket多客户端Client-Server聊天程序的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-03-03
Java并发编程中的ConcurrentLinkedQueue详解
这篇文章主要介绍了Java并发编程中的ConcurrentLinkedQueue详解,GetThread线程不会因为ConcurrentLinkedQueue队列为空而等待,而是直接返回null,所以当实现队列不空时,等待时,则需要用户自己实现等待逻辑,需要的朋友可以参考下2023-12-12


最新评论