侧边栏壁纸
博主头像
colo

欲买桂花同载酒

  • 累计撰写 1823 篇文章
  • 累计收到 0 条评论

判断整数是否为2的幂次方

2025-12-12 / 0 评论 / 2 阅读

题目

判断整数是否为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的幂次方:

  1. n - 1 会将所有低位变为1(如8-1=7 → 0b0111)
  2. 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
  • 相关题目
    • 计算最接近的2的幂次方
    • 判断4的幂次方(需额外验证 n & 0xAAAAAAAA == 0