如何仅用纯位运算(无加减)判断32位整数是否为2的幂
纯位运算判断32位整数为2的幂的方案
核心逻辑
2的正整数次幂的32位整数满足两个必要条件:
- 为正整数,排除0、负数场景
- 二进制表示中仅有1个高位为1,其余位全为0
一行实现代码
针对32位有符号整数,完全不使用加减运算符的实现如下:num > 0 && (num & -num) == num
如果需要完全避免数值比较运算符,纯用位运算实现正数判断可改写为:(num & 0x80000000) == 0 && num != 0 && (num & -num) == num
原理说明
32位补码规则下,
-num等价于~num + 1,无需显式调用二元加减运算符就可以完成数值转换。num & -num的位运算会直接提取出num二进制序列中最低位的1,若num是2的幂,其二进制仅存在1个1,提取结果就会和num本身完全相等。
边界适配
- 若针对32位无符号整数,只需移除符号位判断,保留
num != 0 && (num & -num) == num即可 - 计算复杂度为O(1),和原有减法方案效率完全一致
内容的提问来源于stack exchange,提问作者Money Mit
相关产品推荐
相关产品推荐

