1、名词解释
首先,位移运算仅针对整数,非整数不支持位移运算。
①<<:左移操作符,低位补0。
②>>:算数右移符,高位补符号位。
③>>>:逻辑右移符,高位补0。
如果对byte、short类型移位,在移位运算前,它们会先被转成int类型,且返回值也是int类型。如果对long类型移位,则返回值也是long。
2、正负数换算
在java中最高位表示符号位,最高位0代表正数,最高位1代表负数。
【Java基础|JAVA中的位运算操作】用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
文章图片
- ~:二进制取反运算。
演示 ~79=-80
文章图片
- &:二进制与运算
演示 75&(-100)=8
文章图片
- |:二进制或运算
演示 75|(-100)=-33
文章图片
推荐阅读
- 网络编程|java nio ByteBuffer的使用
- Spring Cloud 最新版发布,干掉 JSch,支持 Mina,这次真的追不动了。。
- node.js|计算机毕业设计node.js+vue在线日程管理系统
- JUC
- 程序员面试那些事儿|双非硕士的辛酸求职回忆录(第 1 篇 一份让面试官满意的简历究竟要做到什么)
- JavaWeb从入门到实战|【JavaWeb】JDBC实战
- JavaWeb从入门到实战|【JavaWeb】数据库连接池
- 安全工具|cobalt strike 的基础使用
- SpringBoot|SpringBoot 如何集成 MyBatisPlus - SpringBoot 2.7.2实战基础