我知道这种方法并且效率不高
(a/2)%2==0;
答案 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)