Это не самый быстрый или самый короткий способ, но я думаю, что он очень удобочитаемый. Поэтому я бы сделал что-то вроде этого:
bool is_power_of_2(int n)
int bitCounter=0;
while(n) {
if ((n & 1) == 1) {
++bitCounter;
}
n >>= 1;
}
return (bitCounter == 1);
}
Это работает, поскольку двоичный файл основан на степенях двойки. Любое число, для которого установлен только один бит, должно быть степенью двойки.