有没有更快的方法来检查数字是否是c ++中2的整数幂

时间:2015-08-10 16:15:50

标签: c++

我知道这种方法并且效率不高

(a/2)%2==0;

3 个答案:

答案 0 :(得分:6)

请参阅Bit Twiddling Hacks

unsigned int v; // we want to see if v is a power of 2
bool f;         // the result goes here 

f = (v & (v - 1)) == 0;
  

请注意,此处0被错误地视为2的幂。要解决此问题,请使用:

f = v && !(v & (v - 1));

答案 1 :(得分:4)

您的方法不会检查。例如,它将为12返回true。(并且将返回false为2)

要检查您是否可以使用x != 0 && (x & (x - 1)) == 0

答案 2 :(得分:3)

如果你正在使用gcc和x64,那么有一个内在函数可以让你使用计算位数的CPU指令:

int __builtin_popcount (unsigned int x)