Проблема с различием & и and. Как работает алгоритм проверки на степень двойки?
Задача:
Учитывая целое число n
, вернуть True
если это степень двойки. В противном случае возвращайтесь False
.
Пример 1:
Вход: n = 1
Выход: правда
Объяснение: 2 ** 0 = 1
Пример 2:
Ввод: n = 16
Вывод: верно
Объяснение: 2 ** 4 = 16
Пример 3:
Вход: n = 3
Выход: ложь
Проблема
Задачу я решил, но увидел решение другого человека. ->
def isPowerOfTwo(self, n: int) -> bool:
return n and not (n & n - 1)
Как это работает? А также вопрос будет: если мы заменим & на and, то результат будет некорректный, почему?