Степень двойки в двоичном представлении -- это единственный взведенный разряд в какой-либо позиции. Если в двоичном представлении степени двойки единственный взведенный разряд имеет позицию b, тогда у числа на единицу меньшего этой степени двойки все разряды младше b будут взведены, а все остальные, включая разряд в позиции b, сброшены. Значит, степень двойки -- это число, которое не равно нулю и не имеет общих взведенных разрядов с числом, на единицу меньшим этой степени двойки.
int is_power_of_two(unsigned n)
{
return (n != 0 && (n & (n - 1)) == 0);
}