java位运算符直接操作二进制位,执行快、开销低,适用于权限控制、状态压缩等;可用>>n代替/2ⁿ、&掩码取位、|组合标志、&~关闭标志、^翻转或交换、异或找唯一数及加解密。

Java位运算符直接操作整数的二进制位,不经过算术逻辑单元的复杂流程,因此执行速度快、资源开销低。高效的关键在于避开除法/取模、减少分支判断、用位操作替代常规数学逻辑,尤其适合权限控制、状态压缩、算法加速等场景。
用位运算代替除法和取模
对2的幂次进行整除或求余时,位运算比%和/快得多,且编译器常自动优化,但显式写出更清晰、可读性更强:
- a >> n 等价于 a / (2ⁿ)(仅适用于非负整数;负数右移涉及符号位,结果可能不同)
- a & ((1 等价于 a % (2ⁿ)(例如 a & 0x7 等价于 a % 8)
快速判断奇偶与提取特定位
最低位决定奇偶性,无需调用 Math 或做模运算:
- (x & 1) == 0 → x 是偶数;(x & 1) == 1 → x 是奇数
- 提取第n位(从0开始计):(x >> n) & 1
- 获取低4位(一个半字节):x & 0xF(即 x & 0b1111)
组合与切换布尔标志
用单个整数存储多个开关状态,节省内存并支持原子操作:
- 定义标志:final int READ = 1 ,WRITE = 1 ,EXEC = 1
- 设多个标志:int flags = READ | WRITE;
- 检查是否启用:(flags & READ) != 0
- 关闭某标志:flags = flags & ~EXEC;(先取反再与)
- 翻转某标志:flags ^= WRITE;
利用异或的特性简化逻辑
^ 具有自反性(a ^ a = 0)、恒等性(a ^ 0 = a)和可交换性,适合无临时变量交换、简单加密、找唯一数等:
- 交换两个整数:x ^= y; y ^= x; x ^= y;(注意:不适用于同一变量引用,如 swap(a, a))
- 数组中只有一个数出现一次,其余都成对出现 → 全部异或结果即为该数:int unique = 0; for (int v : arr) unique ^= v;
- 掩码加密/解密(相同密钥):cipher = plain ^ key;,再异或一次即可还原
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











