As máscaras de bits são terrivelmente antigas. Não consegui encontrar uma referência ao primeiro, mas eles certamente foram populares com o advento dos processadores de 8 bits e provavelmente também foram usados em processadores de 4 bits.
A idéia por trás das máscaras de bits é aproveitar o paralelismo bit a bit. Um computador de 8 bits pode executar a mesma operação bit a bit de 8 bits de uma só vez se estiver compactado em uma única palavra nativa (o que significa que se encaixa em um registro).
O nome vem do mascaramento, que é uma abordagem geral para encobrir áreas com as quais você não deseja interagir. Por exemplo, considere este estêncil para mascarar áreas de uma parede (o estêncil foi movido após a pintura para mostrar o padrão)
As máscaras também são usadas na fotografia, onde passam pelo termo "esquivar" em vez de "estêncil". Você pode usar uma máscara para obscurecer parte da luz durante a impressão para clarear uma área.
O termo também é usado diretamente na fotolitografia, que é a técnica usada para fazer circuitos integrados. A máscara impede que a luz atinja o fotorresistente pintado no chip, o que cria padrões que mais tarde levam a padrões fascinantes no chip. (A imagem abaixo é uma das máscaras do processador Intel 8080A , se você estiver curioso)
Da mesma forma, no mascaramento de bits, você está selecionando as partes da palavra em que deseja operar, mascarando todo o resto dos bits. No exemplo abaixo, eu uso a operação "and" para mascarar a entrada, de modo que apenas o terceiro, o quarto e o oitavo bits sejam exibidos. O restante é "mascarado" para que sejam zeros. A máscara que eu uso é 00110001
. Eu mostro abaixo com a #
representação de 0 e a .
representação de 1, porque isso torna a aparência visual da máscara de bits semelhante à das máscaras físicas acima, e mostro uma linha "bits selecionados" que mostra os bits da saída que não foram mascarados ( "bits selecionados" não é realmente uma operação lógica que acontece ... o processador realmente passa da entrada E da máscara para a saída em uma etapa, mas acho que esclarece a imagem visual)
Input 10010111
Mask ##..###. (aka 00110001)
-----------------------
(selected) 01 1
Input AND Mask 00010001
Como mencionei, o bitmasking é terrivelmente antigo porque aumenta drasticamente a produtividade do processador. Em um processador de 4 bits, ele pode tornar o processador 4x mais rápido. Em um processo de 8 bits, ou pode torná-lo 8x mais rápido (somente em operações bit a bit, é claro).
Um uso fascinante para isso são os motores de xadrez. O tabuleiro de xadrez tem 64 quadrados. Os motores modernos têm números inteiros de 64 bits. Essa é uma sorte terrivelmente conveniente, de modo que os mecanismos de xadrez costumam aproveitá-la. Eles têm os chamados " painéis de bit " que contêm a localização das peças. Isso permite que você faça todos os tipos de otimizações, como procurar todos os movimentos de peões em uma única etapa.