题目
判断整数是否为2的幂次方
信息
- 类型:问答
- 难度:⭐
考点
位运算基本操作,二进制特性分析,边界条件处理
快速回答
使用位运算判断整数 n 是否为2的幂次方的核心方法是:
- 检查
n > 0(排除负数和0) - 验证
(n & (n - 1)) == 0
满足这两个条件时,n 一定是2的幂次方。
解析
原理说明
2的幂次方整数(如1、2、4、8、16...)在二进制表示中有共同特征:最高位为1,其余位全为0。例如:
- 1 → 0b0001
- 2 → 0b0010
- 4 → 0b0100
- 8 → 0b1000
关键位运算技巧 n & (n - 1) 的作用是清除最低位的1。对于2的幂次方:
n - 1会将所有低位变为1(如8-1=7 → 0b0111)n & (n - 1)的结果为0(如0b1000 & 0b0111 = 0)
代码示例(Python)
def is_power_of_two(n: int) -> bool:
# 处理边界条件:n必须为正整数
if n <= 0:
return False
# 核心位运算
return (n & (n - 1)) == 0
# 测试用例
print(is_power_of_two(8)) # True (2^3)
print(is_power_of_two(6)) # False
print(is_power_of_two(0)) # False
print(is_power_of_two(-16)) # False最佳实践
- 边界处理:优先检查
n ≤ 0的情况 - 时间复杂度:O(1),位运算效率极高
- 可读性:添加注释解释位运算逻辑
常见错误
- 忽略0和负数:未处理
n ≤ 0导致错误 - 错误条件:误用
n & (n + 1) == 0 - 浮点数比较:试图用对数函数计算,存在精度问题
扩展知识
- 其他位运算技巧:
- 计算1的个数:
while n: n &= n - 1; count++ - 判断奇偶:
(n & 1) == 0
- 计算1的个数:
- 相关题目:
- 计算最接近的2的幂次方
- 判断4的幂次方(需额外验证
n & 0xAAAAAAAA == 0)