Вам когда-нибудь говорили, что Python — это высокоуровневый язык, и тут не место всяким там "битовым выкрутасам"?
А вот и нет. Внутри каждого "питониста" рано или поздно просыпается системщик, который хочет: И вот тут на сцену выходят битовые сдвиги и упаковка данных. Это просто способ "пошевелить" биты числа: ОперацияЧто делаетПример (n = 4)n << 1Сдвиг влево4 << 1 = 8n >> 1Сдвиг вправо4 >> 1 = 2 Почему? Потому что в двоичном: А теперь — к мясу. Примеры! Допустим, у вас есть объект с такими свойствами: ФлагБит №VISIBLE0SELECTED1ACTIVE2LOCKED3 Вместо 4 отдельных bool, можно просто: VISIBLE = 1 << 0 # 0001
SELECTED = 1 << 1 # 0010
ACTIVE = 1 << 2 # 0100
LOCKED = 1 << 3 # 1000
flags = 0
flags |= VISIBLE | ACTIVE # включаем два флага
# Проверка
print(bool(flags & VISIBLE)) # True
print(bool(flags & SELECTED)) # False 🎯 Плюс: вместо 4 переменных — одно число!
🧠 Память: 1 int вместо 4 bool (которые в CPython весят по 28 байт каждый!). У вас есть два числа: x и y, каждое от