JAVA位运算符<<,>>,>>>,&,|,^,~(第7节)
JAVA的位运算符包括以下
& 与
| 或
^ 异或
~ 非(取反)
>> 右移
<< 左移
>>> 无符号右移
如何区分位运算符和逻辑运算符:
逻辑运算符左右连接的是布尔类型的操作数
位运算符左右连接的是具体的数值
举例逐个说明位运算符
PS:
整数的默认类型为int,int类型占4个字符,一个字符占8位;
所以十进制的1,二进制数为:00000000 00000000 00000000 00000001
1 左移 <<
3 << 2 = 12
3的二进制为 00000000 00000000 00000000 00000011 -->2 二进制位整体向左移动2位后,空缺位置用0填充,如下 000000 00000000 00000000 0000001100 -->12 故3 << 2 = 12
2 有符号右移 >>
6 >> 2 = 1
6的二进制为 00000000 00000000 00000000 00000110 -->6 二进制位整体向右移动2位后,空缺位置用0填充,如下 0000000000 00000000 00000000 000001 -->1 故6 >> 2 = 1
-6 >> 2 = -2
第一步,得到-6的二进制数 如何推导出负数的二进制数 已知正数6的二进制数如下: 00000000 00000000 00000000 00000110 -->6 取反 11111111 11111111 11111111 11111001 +1 11111111 11111111 11111111 11111010 得到-6的二进制数 第二步,根据-6的二进制数移位 -6 >> 2,向右移动2位,空缺位用符号数填充,正数的符号数为0,负数的符号数为1 1111111111 11111111 11111111 111110 -->此为-6右移2位的二进制数 第三步,推导出-6右移2位的二进制数为十进制的哪个数字,得出结果 跟第一步的操作顺序相反 -1 1111111111 11111111 11111111 111101 取反 00000000 00000000 00000000 00000010 -->2 结果2加符号 -2 得出:-6 >> 2 = -2
3 无符号右移 >>>
-6 >>> 2 = 1073741822
第一步,得到-6的二进制数 已知正数6的二进制数如下: 00000000 00000000 00000000 00000110 -->6 取反 11111111 11111111 11111111 11111001 +1 11111111 11111111 11111111 11111010 得到-6的二进制数 第二步,得到-6位移后的二进制数 -6 >>> 2,向右移动2位。因为无符号移位,空缺位用0填充 0011111111 11111111 11111111 111110 --> 1073741822 得出:-6 >>> 2 = 1073741822
4 与 &
6 & 3 = 2
00000000 00000000 00000000 00000110 -->6
00000000 00000000 00000000 00000011 -->3
-------------------------------------->&,两个都为1则为1,否则为0
00000000 00000000 00000000 00000010 -->2
5 或 |
6 | 3 = 7
00000000 00000000 00000000 00000110 -->6
00000000 00000000 00000000 00000011 -->3
-------------------------------------->|,两个有一个为1则为1,否则为0
00000000 00000000 00000000 00000111 -->7
6 异或 ^
6 ^ 3 = 5
00000000 00000000 00000000 00000110 -->6
00000000 00000000 00000000 00000011 -->3
-------------------------------------->^,两个不同则为1,相同为0
00000000 00000000 00000000 00000101 -->5
7 非(取反) ~
~6 = -7
00000000 00000000 00000000 00000110 -->6 -------------------------------------->~,取反,1变0,0变1 11111111 11111111 11111111 11111001 -->取反后的二进制数,确认为负数 转换为十进制: -1 11111111 11111111 11111111 11111000 取反 00000000 00000000 00000000 00000111 --> 7 加符号-为:-7 得到:~6 = -7
8 证明为什么byte类型的取值范围为-128到127
byte类型,占1字节,8位,去掉符号位,只有7位可用,取值范围为2的7次方,即:
127 :01111111
-128: 10000000
10000000 -1 01111111 取反 10000000 -->2的7次方=128 加符号-为:-128
分类:
JAVA从0开始自学记录
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具