评估整数是否为POT(2的幂)

时间:2011-03-05 07:43:28

标签: c algorithm bit-manipulation

  

可能重复:
  Query about working out whether number is a power of 2
  How to check if a number is a power of 2

我需要这个原型的函数体:

bool isPOT(int x);

所以它会返回,例如isPOT(3)= FALSE,但isPOT(8)= TRUE

最漂亮/简洁的算法是什么?什么是最有效的?

PS:我很惊讶我在SO上找不到这个问题,所以我完全期待有人能够发现一些重复的内容。

PPS:有人可以创建POT,NPOT,Power-Of-Two标签吗?

2 个答案:

答案 0 :(得分:12)

bool IsPOT(int x)
{
    return (x > 0) && ((x & (x - 1)) == 0);
}

答案 1 :(得分:6)

不确定是否发生此完全问题,但检查很简单

x & (x - 1) == 0