Java位运算符&、|、^、~直接操作整数补码的二进制位,用于掩码提取(如byte & 0x0F)、置位(如value | 0x04)、翻转(如value ^ 0xFF)和取反(~x等价于-x-1),适用于状态管理、加密及底层控制。

Java 中的位运算符(&、|、^、~)直接对整数类型的二进制补码表示进行操作,不关心数值含义,只逐位处理。它们常用于底层控制、状态标记、加密、网络协议解析等场景。
位与(&):提取特定位或清零
对两个操作数的对应位执行逻辑与:仅当两位都为 1 时结果为 1,否则为 0。
- 常用于“掩码提取”——比如获取一个字节的低 4 位:
byte & 0x0F(即& 15),因为0x0F = 00001111₂,高位被强制置 0。 - 也可用于判断某位是否为 1:如
(flag & 0x04) != 0表示第 3 位(从 0 开始计)是否被设置(0x04 = 100₂)。
位或(|):设置特定位
对应位中只要有一个为 1,结果就为 1;全为 0 才得 0。
- 典型用途是“置位”:比如把 int 的第 2 位设为 1,可写
value | 0x04(不影响其他位)。 - 多个标志合并也常用它:定义常量
READ = 1, WRITE = 2, EXEC = 4,组合权限用READ | WRITE得到 3(二进制011)。
位异或(^):翻转特定位或交换变量
相同为 0,不同为 1。具有自反性:a ^ b ^ b == a。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
- 最常用作“按位翻转”:如
value ^ 0xFF可将一个字节所有位取反(等价于~value & 0xFF)。 - 无需临时变量交换两个整数:
a ^= b; b ^= a; a ^= b;(但实际开发中不推荐,可读性差且有溢出风险)。 - 在简单加密或校验中也常见,比如异或混淆原始数据(密钥需保密且长度匹配)。
位非(~):单目取反,注意符号扩展
对操作数每一位取反(0→1,1→0)。Java 中所有整型都是有符号补码表示,所以 ~x 等价于 -x - 1。
- 例如:
~5→5 = ...00000101₂→ 取反得...11111010₂→ 补码解释为-6。 - 若只想对低 n 位取反(如只翻转一个字节),需配合掩码:如
(~value) & 0xFF保证高字节为 0。 - 常用于构造掩码,比如清空低 3 位:
value & ~0x07(因为0x07 = 111₂,取反后为...11111000₂)。
使用时要注意操作数类型自动提升(如 byte/short 会先转为 int),以及负数的补码表示。位运算不适用于浮点数或对象,也不具备短路特性(和 &&/|| 不同)。合理使用能让代码更高效紧凑,但应以可读性和正确性为前提。

















