java中可用位运算高效判断奇偶性和2的幂:n & 1 == 0为偶数,否则奇数;n > 0 && (n & (n - 1)) == 0则为2的幂,因前者检测最低位,后者清除最右1位。

在 Java 中,用位运算判断奇偶性和是否为 2 的幂,既高效又简洁,因为它们直接操作二进制表示,避免了取模或循环等开销。
用 & 判断奇偶性
整数的二进制最低位(bit 0)决定奇偶:0 表示偶数,1 表示奇数。因此只需和 1 做按位与:
-
n & 1 == 0→ 偶数(最低位是 0) -
n & 1 == 1→ 奇数(最低位是 1)
例如:6 & 1 是 110 & 001 = 0,所以 6 是偶数;7 & 1 是 111 & 001 = 1,所以 7 是奇数。注意:该方法对负数也成立(Java 使用补码,-1、-3 等奇数的最低位仍是 1)。
用 n & (n - 1) == 0 判断是否为 2 的幂
一个正整数是 2 的幂,当且仅当其二进制形式**只有一个 1**,如 1 (1)、2 (10)、4 (100)、8 (1000)。利用位运算技巧:n & (n - 1) 会把 n 最右边的 1 变成 0。
- 若
n > 0且n & (n - 1) == 0,则n是 2 的幂 - 必须加
n > 0条件,因为0 & (-1)在 Java 中不为 0,且 0 不是 2 的幂
例如:n = 8 → 8 & 7 = 1000 & 0111 = 0,成立;n = 6 → 6 & 5 = 110 & 101 = 100 = 4 ≠ 0,不成立。
补充:处理边界情况的推荐写法
实际编码中建议封装为清晰、健壮的工具逻辑:
- 奇偶性:
(n & 1) != 0表示奇数(比== 1更安全,因n & 1结果只能是 0 或 1) - 2 的幂:
n > 0 && (n & (n - 1)) == 0(注意用&&避免短路问题,且确保先判正)
这些表达式在 JVM 中常被优化为单条 CPU 指令,性能远超 n % 2 或循环除法。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











