按位与规则如下:
00 = 0;
01 = 0;
10 = 0;
11 = 1;
先看一个都是正整数的值 102 。
最终得出结果 0000 10100000 0010 = 0000 0010 转换成十进制就是2 。
对于负值的位与运算有点区别的地方就是参与运算的是补码 。
举例说明: 10-2
具体如何得到补码,可以参考我之前写的文章基础类型的相互转换 。这里对于负值的情况需要了解什么是原码,反码和补码 。参与运算的是补码 。-2 的原码是 1000 0010反码是 1111 1101 补码 在反码的基础最后一位加 1 得到1111 1110 。
最终结果得到 0000 10101111 1110 = 0000 1010 十进制也就是 10 。
这个时候怎么校验结果是否正确呢? 直接写 Java 代码就好了, 打开 jshell:
位或 |
按位或 , 和逻辑或很类似 , 只要二者有一位 1 结果就是 1 。
按位或规则如下:
0 | 0 = 0;
0 | 1 = 1;
1 | 0 = 1;
1 | 1 = 1;
根据上面的运算得到了 10 | 2 = 10 。
负值有略有不同 。
还是要灵活运用原码反码和补码,特别是负数的情况下,因为正数的原码和补码一致 。
位反 ~
按位反, 和逻辑非类似 。是对位进行直接取反 。
按位反规则如下:
~1 = 0;
~0 = 1;
先用 2 进行运算处理:
在进行 -2 的运算操作
-2 的原码 需要转换成补码,用补码进行取反运算 。得到 1 的二进制 。
代码演示如下:
位异或 ^
位异或是基于二进制的位运算 。采用符号 XOR 在 Java 中使用 ^ 进行表示 。两个值相同取 0,不同的取 1 。
按位异或规则如下:
1 ^ 1 = 0;
0 ^ 0 = 0;
1 ^ 0 = 1;
0 ^ 1 = 1;
举例 10 ^ 2
举例 10 ^ -2
代码演示结果的准确性:
异或在代码优化和实际的工作中会经常用到 。后续实战中用到了在详细分析用法,现在知道进行异或运算即可 。
位左移
将一个操作数进行二进制位往左移 , 移动后空出来的低位用 0 进行填充 。移除的高位舍去 。高位丢弃 , 低位补零 。
操作数移动的位数
举例说明 102
位左移代码演示:
位右移
将一个操作数进行二进制往右移, 移动后,有两种情况 , 一种有无符号一种是有符号 。也就是最高位为 0 移动后高位补 0, 如果最高位(符号位)为 1 , 移动后空缺位都为 1.
操作数移动的位数
举例说明 102
对于负数举例 -22 空缺位补 1:
位右移代码演示:
注意这两者的区别 。
无符号位右移
这个是和右移操作上是一致的,但是不管是否最高位(符号位)为 1, 空缺位都使用 0 进行补齐 。
操作数移动的位数
举例说明 102
对于负数来说 。这里有点区别,因为对于负值来说,上面其实都是 32 位,为了让大家看起来舒服转换成了对应的 8 位的 。因为无符号位右移会改变正负值, 所以 32 位的负值和 8 位的负值是不一致的 。
并且 Java 在处理 byte, short , char 等值进行移位操作前 , 会先将类型转换成 int 因为 int 占用 32 位 。
所以 -22 的时候,8 位运算应该是如下:
因为会先转换成 32 位 。所以 32 位的 -2 等于如下:
也就是结果: 1073741823
无符号位右移代码如下:
理解原理 。更能发现问题 。
类型比较运算符
这里说的类型比较是对象的比较 。判断每个定义的变量是否是某个类 。该类可以是(接口、抽象类) 。
语法规则:
boolean = 变量 instanceof 类
举例说明:
运行查看结果:
这里需要注意:
推荐阅读
- 政府微信公众号运营机制,政府微信公众号建设方案
- 会议视频用什么app,可以会议视频的软件
- 休闲益智的集体小游戏教案,益智小游戏团体
- b站手机直播录屏娱乐,b站直播手机怎么录播
- 文件在mysql中怎么存 mysql文件存储路径设置
- go语言管理技巧,基于go语言的管理系统
- 美国如何限制电商,美国如何限制电商消费
- 知识型直播技巧,知识主播技巧
- c语言函数命名规则 c语言函数命名规则requre