Nos exemplos acima setamos e resetamos bits em suas posições. Isso pode dificultar,
de alguma forma, a comparação de valores com o comando if e switch.
Tabela:
valor == 0x30 //sem deslocamento
valor == 3 //com deslocamento
Usando os operadores (>>) e (<<) podemos recuperar esses bits específicos como mostrado
no exemplo abaixo:
Sintaxe:
nome_variavel operador qtd_bits
Exemplo 6:
#include <stdio.h>
int main()
{
unsigned char variavel = 0xff;
unsigned char resultado = variavel & 0b00011000; //0x18
resultado = resultado >> 3; //0b00000011
printf("%x",resultado); //3
return 0;
}
Saída
3
Usando os operadores (&), (<<) e (>>) podemos criar uma macro para testar apenas
1 bit específico.
Sintaxe:
#define TESTAR_BIT(valor, posicao) (((valor) & (1 << (posicao))) >> posicao)
Exemplo 7:
#include <stdio.h>
#define TESTAR_BIT(valor, posicao) (((valor) & (1 << (posicao))) >> posicao)
int main()
{
unsigned char variavel = 0xff;
unsigned char flag = TESTAR_BIT(variavel,4); //00010000
printf("%x",flag); //1
return 0;
}
Saída
1