DEV Community

Cover image for Java — Tradução de Máscara de Bits (BitMask)
Henrique Otogami
Henrique Otogami

Posted on

Java — Tradução de Máscara de Bits (BitMask)

Introdução

Imagine um sistema embarcado que possui alguns sensores conectados fisicamente e que informe o estado lógico de todos esses sensores em apenas um número. Essa é a estratégia de uma máscara de bits (BitMask).

O que é uma Máscara de Bits?

Uma máscara de bits é um valor (geralmente um número inteiro) usado para isolar, modificar ou verificar bits específicos dentro de outro valor binário, utilizando operações bit a bit (como AND, OR, XOR, NOT).

Por exemplo, usando a operação AND (&), é possível verificar se determinado bit está ativado (1) ou desativado (0) em um número.
Exemplo: Para verificar se o terceiro bit de um número está ativo:

int valor = 0b1010;                     // binário: 1010
int mascara = 0b0100;                   // binário: 0100 (terceiro bit)
boolean ativo = (valor & mascara) != 0; // true se o terceiro bit está 1
Enter fullscreen mode Exit fullscreen mode

Assim, máscaras de bits são muito usadas para manipular flags, permissões e estados compactados em variáveis inteiras.

Exemplo de Estado Lógico de Sensores

Imagem 01 — Visão Panorâmica do Exemplo de Sistema Embarcado<br>

Imagem 01 — Visão Panorâmica do Exemplo de Sistema Embarcado

Em um sistema embarcado qualquer, são conectados oito sensores:

  • Sensor de Temperatura;
  • Sensor de Umidade;
  • Sensor de Luminosidade;
  • Sensor de Presença;
  • Sensor de Fumaça;
  • Sensor de Pressão;
  • Acelerômetro;
  • Giroscópio.

O estado lógico de cada sensor é representado por um bit. Assim, os estados de todos os sensores são expressos em um único Byte em hexadecimal. E essa é a Máscara de Bits (BitMask).

Considere um segundo sistema, que recebe esse Byte e deseja identificar quais sensores estão habilitados e quais estão desabilitados. Para realizar essa tarefa, é necessário implementar uma "tradução" desse valor.

Tradução da Máscara de Bits

Imagem 02 — Explicação da Tradução de Máscara de Bits

Imagem 02 — Explicação da Tradução de Máscara de Bits

A tradução da máscara de bits recebida pelo segundo sistema consiste nas seguintes etapas:

  • Receber o Byte contendo a Máscara de Bits (0x7F);
  • Iterar até o tamanho máximo de um Byte (8 bits);
  • Deslocar os bits do número 1 com o valor do índice da iteração. Esse deslocamento pode ser entendido como potência de 2;
  • Realizar operação lógica E (AND) com o valor recebido (0x7F) e o valor deslocado.

A Imagem 02 acima demonstra como essas etapas são realizadas com um pouco mais de detalhes.
Perceba que a etapa de deslocamento de bits é muito importante para localizar cada bit que representa o estado lógico de um sensor.
A figura abaixo demonstra graficamente o deslocamento e a operação AND, mostrando como cada bit é isolado.

Exemplo de Deslocamento de Bits

int mask0 = 1 << 0;
//  mask0 = (0000 0001)b << (0000 0000)b = 2^0 = (0000 0001)b = 1

int mask1 = 1 << 1;
//  mask1 = (0000 0001)b << (0000 0001)b = 2^1 = (0000 0010)b = 2

int mask2 = 1 << 2;
//  mask2 = (0000 0001)b << (0000 0010)b = 2^2 = (0000 0100)b = 4

int mask3 = 1 << 3;
//  mask3 = (0000 0001)b << (0000 0011)b = 2^3 = (0000 1000)b = 8

// [....]

int mask7 = 1 << 7;
//  mask7 = (0000 0001)b << (0000 0111)b = 2^7 = (1000 0000)b = 128
Enter fullscreen mode Exit fullscreen mode

Implementação da Tradução da Máscara de Bits

Conclusão

O uso de máscaras de bits constitui uma prática essencial em sistemas embarcados e em diversas aplicações de baixo nível, permitindo o controle e a leitura eficiente de múltiplos estados lógicos dentro de uma única variável.
Por meio de operações simples de deslocamento e comparação, é possível representar informações complexas de forma compacta e performática, reduzindo o consumo de memória e otimizando o processamento.

A implementação apresentada demonstrou como o deslocamento de bits (1 << n) e a operação lógica AND (&) podem ser aplicados para identificar o estado individual de cada sensor em um sistema embarcado.
Esse método é amplamente utilizado em protocolos de comunicação, registradores de microcontroladores e mecanismos de controle de hardware, reforçando sua relevância prática.

Support Henrique Otogami on Ko-fi

ko-fi.com/henriqueotogami

Ficou alguma dúvida ou tem sugestões?
Comente aqui embaixo ou me chame em alguma das minhas redes.
Valeu! ✌🏻

Top comments (0)