Я смотрю на какой-то код, который должен быть тривиальным, но моя математика меня здесь не устраивает.
Здесь условие, которое проверяет, имеет ли число, если имеет значение 2, используя следующее:
if((num != 1) && (num & (num - 1))) { /* make num pow of 2 */ }
Мой вопрос в том, как использование побитового И между num и num-1 определяет, является ли число значением 2?