Для каких целей в Python используются побитовые операции

Столкнулся с побитовыми операциями. Изучил побитовое сложение, конъюнкцию и дизъюнкцию. Таблицы истинности и все, что с этим связано. Но не нашел понятных примеров кода применения. Был бы признателен, если бы кто-нибудь привел пример понятного кода применения побитовых операций


Ответы (1 шт):

Автор решения: MarianD

Пример:

FLAG_MATH = 0b001
FLAG_BIOL = 0b010
FLAG_CHEM = 0b100

student = FLAG_MATH | FLAG_BIOL & ~FLAG_CHEM       # 0b011 простейшее, но непонятное

if student & FLAG_MATH:
    print ("Сделал экзамен по математике.")
else:
    print ("Провалился на экзамене по математике.")

Вывод:

Сделал экзамен по математике.


Объяснение:

Для студентов используем отдельные биты для отдельных предметов. Значение 1 значит, что он сделал экзамен, 0 - что провалился.

Теперь (см. student = ...):

  • включение флага (присвоение значения 1) - оператор | с маской, в которой 1 на соответствующей позиции,
  • выключение флага (присвоение значения 0) - оператор & с маской, в которой 0 на соответствующей позиции,,
  • переключение флага (0 на 1, 1 на 0) - operator ^ с маской, в которой 1 на соответствующей позиции.

Тест:

  • флаг включенный? - Оператор & с маской, в которой включен только соответствующий бит (т.е. все остальные 0), например 0b001, что в нашем примере FLAG_MATH:

    if student & FLAG_MATH:
    
→ Ссылка