bitlvl
RU

Калькулятор битовых масок

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

Разрядность

Именованные флаги

Дайте установленным битам имена и получите константы на нужном вам языке. Оставьте имя пустым, чтобы пропустить бит.

  

Результаты и сообщения этого инструмента выводятся на английском языке.

Что такое битовая маска

Битовая маска — это число, которое используется ради своего битового шаблона, а не значения. Каждая позиция бита обозначает один переключатель «вкл/выкл», поэтому одно целое число может хранить 8, 32 или 64 флага сразу. Права доступа (rwx), режимы открытия файлов, биты возможностей CPU, сетевые маски и наборы опций почти в любом C API — это битовые маски.

Бит n имеет значение 2ⁿ, поэтому маска с установленными битами 0, 2 и 7 равна 1 + 4 + 128 = 133 = 0x85 = 1000 0101. Чтобы получить константу в коде, единицу сдвигают в нужную позицию: 1 << 7.

Как использовать маску

ЗадачаРешение
Проверить, установлен ли флаг(value & FLAG) != 0
Проверить, что установлены все флаги из набора(value & MASK) == MASK
Установить флагvalue |= FLAG
Сбросить флагvalue &= ~FLAG
Переключить флагvalue ^= FLAG
Извлечь поле из битов 4–7(value >> 4) & 0xF
Собрать маску для битов lo..hi((1 << (hi - lo + 1)) - 1) << lo

Как прочитать готовую маску

Переведите значение в двоичный вид и пронумеруйте биты справа, начиная с 0. Каждая единица — установленный флаг. Инструмент выше делает это для любого вставленного значения и показывает позиции компактным списком вроде 0-2, 5, 7.

Примеры

Права Unix 0755
биты 0, 2, 3, 5, 6, 7, 8 → 1 1110 1101
Маска подсети /20
старшие 20 бит из 32 установлены → 0xFFFFF000
Младший полубайт
биты 0-3 → 0x0F

Вопросы

Почему номера битов начинаются с 0?

Потому что бит n имеет значение 2ⁿ, а 2⁰ = 1 — это самый правый бит. Нумерация с нуля делает арифметику согласованной: сдвиг на n ставит единицу в бит n.

В чём разница между битовой маской и битовым полем?

Битовая маска — это число, с которым выполняют AND или OR. Битовое поле — группа соседних битов внутри большего значения, которые вместе хранят небольшое число (например, биты 4–7 со значением 0–15). Чтобы прочитать или записать битовое поле, используют маску и сдвиг.

Сколько флагов помещается в целое число?

По одному на бит: 8 в байте, 32 в 32-битном int, 64 в 64-битном int. Если нужно больше, используйте массив целых чисел или специальный тип bitset.

Зачем писать 1 << n вместо самого числа?

Так видно, какой именно бит имеется в виду, и нельзя опечататься, получив другую степень двойки. Компилятор сворачивает выражение в константу, так что затрат во время выполнения нет.

Инструмент корректно работает с 64-битными масками?

Да. Он считает с целыми числами произвольной точности, поэтому все 64 бита точны, включая бит 63.