Алгоритм работает, но работает медленно?
В коде много *, /, % и прочих "тяжёлых" операций?
Добро пожаловать в мир побитовой оптимизации — старой доброй школы, где даже деление на 2 считается излишеством. Здесь мы превращаем обычные операции в быстрые, битовые. Плюс — минимум магии, максимум пользы, даже в Python. Да-да, даже в высокоуровневом языке биты — это сила. x = 7
print(x * 8) # 56
print(x << 3) # 56 тоже! 💡 Так можно ускорить циклы, если множители — степени двойки. x = 36
print(x // 4) # 9
print(x >> 2) # 9 n = 17
if n & 1 == 0:
print("Чётное")
else:
print("Нечётное") 💡 Это работает даже в условиях, где n % 2 дорог. x = 7
res = (x << 3) + (x << 1) # 8x + 2x = 10x
print(res) # 70 🧙 Так компиляторы иногда оптимизируют внутри. x = 77 # 0b1001101
res = x & ~1
print(res) # 76 (0b1001100) def is_power_of_two(n):
return n > 0 and (n & (n - 1)) == 0 Почему работает? 🧪 Пример: print(is_power_of_two(8)) # True
print(is_power_of_two(10)) # False Тол