Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.

  1. Entender os operadores bit-abit/bitwise
  2. Entender o operador E(&)
  3. Entender o operador OU(|)
  4. Entender o operador Não(~)
  5. Entender o operador OU Exclusivo(^)
  6. Entender o operador de deslocamento >>
  7. Entender o operador de deslocamento <<

Para entendermos sobre a aplicação dos operadores bit-a-bit(bitwise) é importante entender sobre tabela verdade que foi explicada em Operadores Bitwise no tutorial da linguagem Portugol.

Diferente dos operadores lógicos, os operadores bit-a-bit realizam operações sobre os bit de uma variável ou expressão para setar(1) e resetar(0) seus valores.

Abaixo serão listados os operadores suportados pela linguagem C.

Tab. 1: Operadores bitwise
Operador Significado Exemplo
& E bit-a-bit a & b
| Ou bit-a-bit a | b
~ Não bit-a-bit ~a
^ Ou Exclusivo bit-a-bit a ^ b
>> Desloca N bits à direita a>>b
<< Desloca N bits à esquerda a<<b

Levando em consideração a mesma ideia da tabela verdade do operador E lógico, porém aplicadas aos bits entre duas variáveis, podemos realizar a operação E bit-a-bit como no exemplo abaixo:

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
A 1 0 1 0 0 0 0 0
B 1 0 1 0 1 1 1 1
A & B 1 0 1 0 0 0 0 0
Sintaxe
valor1/expressao1 & valor2/expressao2
Exemplo 1
#include <stdio.h>

void main(void)  
{
    int varA = 0xa0,varB=0xaf;
    printf("%02x \n",varA & varB);
}
Saída
a0

O operador E bit-a-bit é utilizado para resetar bits de uma variáves ou expressão. Uma máscara é definida para representar os bits que desejamos manter ao aplicarmos o operador.

Exemplo 2
#include <stdio.h>

void main(void)  
{
    int varA = 0xaf,mascara=0x0f;
    printf("%02x \n",varA & mascara);
}
Saída
0f 

Levando em consideração a mesma idea da tabela verdade do operador OU lógico, porém aplicadas aos bits entre duas variáveis, podemos realizar a operação OU bit-a-bit como no exemplo abaixo:

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
A 1 0 1 0 0 0 0 0
B 1 0 1 0 1 1 1 1
A | B 1 0 1 0 1 1 1 1
Sintaxe
valor1/expressao1 | valor2/expressao2
Exemplo 3
#include <stdio.h>

void main(void)  
{
    int varA = 0xa0,varB=0xaf;
    printf("%x \n",varA | varB);
}
Saída
af 

O operador OU bit-a-bit é utilizado para setar bits de uma variáves ou expressão. Uma máscara é definida para representar os bits que desejamos setar ao aplicarmos o operador.

Exemplo 4
#include <stdio.h>

void main(void)  
{
    int varA = 0xa0,mascara=0x0f;
    printf("%x \n",varA | mascara);
}
Saída
af

Levando em consideração a mesma idea da tabela verdade do operador Não lógico, porém aplicadas aos bits entre duas variáveis, podemos realizar a operação Não bit-a-bit como no exemplo abaixo:

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
A 1 0 1 0 0 0 0 0
~A 0 1 0 1 1 1 1 1
Sintaxe
~valor/expressao
Exemplo 5
#include <stdio.h>
void main(void)  
{
    int varA = 0xf0;
    printf("%02x \n",~varA);
}
Saída
0f

O operador bit-a-bit Ou Exclusivo(^) possui sua tabela verdade que pode pode ser resumida como: se os bits foram iguais, o resultado é igual a 0, caso contrário, o resultado é igual a 1.

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
A 1 0 1 0 0 0 0 0
B 1 0 1 0 1 1 1 1
A ^ B 0 0 0 0 1 1 1 1
Sintaxe
valor1/expressao1 ^ valor2/expressao2
Exemplo 6
#include <stdio.h>

void main(void)  
{
    int varA = 0xa0,varB=0xaf;
    printf("%02x \n",varA ^ varB);
}
Saída
0f

O operador bit-a-bit >>, de deslocamento à direita, desloca todos os bits de uma variável ou expressão atribuindo 0 as bits mais significativos.

Sintaxe
valor ou expressao >> quantidade_bits_deslocamento
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 -
A 1 0 0 0 0 0 0 1 -
A>>1 0 1 0 0 0 0 0 0 1
Exemplo 7
#include <stdio.h>

void main(void)  
{
    int varA = 0x81;
    printf("%02x \n",varA >> 1);
}
Saída
40

O operador bit-a-bit <<, de deslocamento à esquerda, desloca todos os bits de uma variável ou expressão atribuindo 0 as bits menos significativos.

Sintaxe
valor ou expressao << quantidade_bits_deslocamento
- Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
A - 1 0 0 0 0 0 0 1
A<<1 1 0 0 0 0 0 0 1 0
Exemplo 8
#include <stdio.h>

void main(void)  
{
    int varA = 0x81;
    printf("%02x \n",varA <<1);
}
Saída
02
  1. 10/03/2025 - revisão 3 - Remoção de link referência XOR errada; Adição de operadores de deslocamento >> e <<
  2. 05/10/2024 - revisão 2 - Correção em Exemplos; Ajustes gramaticais pontuais
  3. 27/09/2023 - revisão 1 - Correção em referências, erros gramaticais,layout, sintaxe e tabela E e OU
  4. 19/05/2023 - versão inicial