Битовые маски ужасно стары. Я не смог найти ссылку на первый, но они, безусловно, были популярны с появлением 8-разрядных процессоров и, вероятно, также использовались в 4-разрядных процессорах.
Идея, стоящая за битовыми масками, заключается в том, чтобы использовать преимущества побитового параллелизма. 8-битный компьютер может выполнять одну и ту же побитовую операцию одновременно с 8 битами, если они упакованы в одно собственное слово (что означает, что оно помещается в регистр).
Название происходит от маскировки, которая является общим подходом для маскировки областей, с которыми вы не хотите взаимодействовать. Например, рассмотрите этот трафарет для маскировки областей стены (после рисования трафарет был перемещен, чтобы показать рисунок)
Маски также используются в фотографии, где они обозначаются термином «уклонение», а не «трафарет». Вы можете использовать маску, чтобы скрыть часть света во время печати, чтобы осветлить область.
Термин также используется непосредственно в фотолитографии, которая является техникой, используемой для создания интегральных схем. Маска предотвращает попадание света на фоторезист, нанесенный на чип, что создает рисунки, которые впоследствии приводят к появлению рисунков на чипе. (Изображение ниже - одна из масок для процессора Intel 8080A , если вам интересно)
Аналогично, при маскировании битов вы выбираете части слова, с которыми хотите работать, маскируя все остальные биты. В приведенном ниже примере я использую операцию «и», чтобы замаскировать входные данные таким образом, чтобы показывались только 3-й, 4-й и 8-й биты. Остальные «замаскированы», так что они 0. Я использую маску 00110001
. Ниже я показываю это с #
представлением 0 и .
представлением 1, потому что это делает визуальный внешний вид битовой маски похожим на внешний вид физических масок выше, и я показываю строку «выбранные биты», которая показывает биты из вывода, которые не были замаскированы ( «выбранные биты» на самом деле не являются логической операцией, которая происходит ... процессор действительно переходит от маски ввода и вывода к выводу за один шаг, но я думаю, что это проясняет визуальное изображение)
Input 10010111
Mask ##..###. (aka 00110001)
-----------------------
(selected) 01 1
Input AND Mask 00010001
Как я уже упоминал, битовая маскирование ужасно устарело, поскольку значительно повышает производительность процессора. На 4-битном процессоре он может сделать процессор в 4 раза быстрее. На 8-битном процессе, или он может сделать его в 8 раз быстрее (конечно, только на битовых операциях).
Одно из увлекательных применений - шахматные движки. Шахматная доска имеет 64 квадрата. Современные двигатели имеют 64-битные целые числа. Это очень удобная удача, поэтому шахматные движки часто используют ее. У них есть так называемые « битборды », которые содержат расположение фигур. Это позволяет вам выполнять все виды оптимизаций, такие как поиск всех ходов пешки за один шаг.