ЯдроКодаподготовка к экзаменам
Учебная платформа

Загружаем материалы

Подготавливаем материалы и навигацию по разделу.

Битовые операции: маски, флаги и двоичная логика

Автор: · Обновлено

Битовые операции работают с двоичным представлением чисел. Они встречаются в школьной информатике рядом с системами счисления, логикой, кодированием и олимпиадными задачами.

Основные операции:

Проверка четности и отдельных битов

Число четное, если его последний двоичный бит равен 0.

number = int(input())

if number & 1 == 0:
    print('четное')
else:
    print('нечетное')

Чтобы проверить k-й бит, используют маску 1 << k.

number = 13
k = 2

if number & (1 << k):
    print('бит установлен')
else:
    print('бит не установлен')

Число 13 в двоичной системе — 1101, поэтому бит с номером 2 установлен.

Флаги в одной переменной

Маска позволяет хранить несколько признаков в одном числе. Например, ученик решил задачи 0, 2 и 3.

mask = 0
mask |= 1 << 0
mask |= 1 << 2
mask |= 1 << 3

print(bin(mask))

Когда это полезно

Битовые операции нужны не в каждой школьной задаче, но они хорошо связывают программирование с устройством компьютера. Они помогают понять двоичную запись, логические операции, кодирование признаков и перебор подмножеств.

Начинайте с простых проверок: четность, количество единиц в двоичной записи, установка и снятие бита. После этого маски перестают выглядеть магией и становятся компактным инструментом.

Практикум: флаги доступа в одном числе

Назначьте битам права: чтение — 1, запись — 2, публикация — 4, администрирование — 8. Соберите права редактора из чтения, записи и публикации через побитовое ИЛИ. Проверьте каждое право через побитовое И, затем удалите запись и убедитесь, что остальные биты сохранились. Выведите значения в четырёхбитном виде. Сравните маски 5 и 10 и объясните позиции единиц. Подготовьте тест, где право уже установлено: повторное включение не должно менять число.

Контрольная точка

Чем логическое and отличается от побитового & для маски 6 и права 2? Проследите отдельные разряды и сформулируйте условие, при котором результат проверки считается ненулевым.

Частые вопросы

Зачем нужны маски, если можно хранить список прав?

Список часто понятнее в прикладном коде. Маски полезны в компактных протоколах, низкоуровневых форматах и задачах по двоичной логике. Их стоит применять там, где договорённость о каждом бите явно зафиксирована.

Источники