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

P i*_*P i 5 c algorithm bit-manipulation

可能重复:
查询是否数字是2的幂
如何检查数字是否为2的幂

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

bool isPOT(int x);
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Pau*_*l R 12

bool IsPOT(int x)
{
    return (x > 0) && ((x & (x - 1)) == 0);
}
Run Code Online (Sandbox Code Playgroud)

  • @datenwolf:除了你得到宏的所有常见问题 - 最好只保留一个int函数,它将处理char,short和int,如果你需要处理比int更宽的东西,那么再做一个额外的版本. (3认同)

Nik*_*bak 6

不确定是否发生了这个确切的问题,但检查很简单

x & (x - 1) == 0
Run Code Online (Sandbox Code Playgroud)

  • 几乎 - 你还需要检查x> 0,否则当`x = 0`时得到的结果不正确. (3认同)