可能重复:
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标签吗?
答案 0 :(得分:12)
bool IsPOT(int x)
{
return (x > 0) && ((x & (x - 1)) == 0);
}
答案 1 :(得分:6)
不确定是否发生此完全问题,但检查很简单
x & (x - 1) == 0