aula 291

Operador OU | bit a bit. Como funciona a operação OR bit a bit?

Nesta aula vamos aprender como funciona o operador OR ( | ) bit a bit, na linguagem de programação C. Com esta operação é possível ativar, ligar um determinado bit, setando seu valor para 1.

A operação bit a bit ou ( | ) é muito semelhante à operação || que já conhecemos, inclusive possui a mesma tabela verdade.

A B A & B
000
011
101
111
Tabela verdade para o operador or bit a bit.

A operação é realizada sobre cada bit. Assim, no resultado final cada bit será 0 apenas se ambos os bits da operação forem 0. Vamos a um exemplo para facilitar a compreensão. Sejam as seguintes variáveis:

/*
     Exemplo com o operador or ( | )
*/

int a, b;
a = 30;    // 0000.0000.0001.1110 em binário
b = 19;    // 0000.0000.0001.0011
c = a | b; // 0000.0000.0001.1111 = 31

A variável c possuirá o valor 31 em decimal. A princípio esse valor pode não fazer sentido, mas observe que é exatamente o resultado da operação or bit a bit entre as variáveis a e b.

Programa de teste:

/*
    Operação or entre as variáveis a e b
*/

int main( ){

    int a, b, c;

    a = 30;
    b = 19;
    c = a | b;
    printf("%d & %d = %d\n", a, b, c);

    return 0;
}

Perceba que o resultado é completamente diferente do operador ||. Ao fazer esta operação:

a = 30; // 0000.0000.0001.1110
b = 19; // 0000.0000.0001.0011
c = a || b; // 0000.0000.0000.0001 = 1

O resultado será 1 pois o operador || não faz a operação bit a bit, mas verifica qual valor é diferente de nulo, diferente de falso. Como na linguagem C zero é falso e tudo que for diferente de zero é verdadeiro, o resultado será 1, pois as variáveis ‘a’ e ‘b’ são verdadeiras (diferente de zero).

Mesmo se o valor de uma das variáveis for alterado para zero, assim:

a = 0; // 0000.0000.0000.0000
b = 19; // 0000.0000.0001.0011
c = a || b; // 0000.0000.0000.0001 = 1

O resultado ainda será 1, pois uma das variáveis, a variável ‘b’, ainda é verdadeira (diferente de zero).

Aplicações:

1) Como ativar um bit (colocar um bit em 1)

Imagine uma sequência de bits qualquer como: xxxx.xxxx

Como colocar o bit 4 em 1? O bit 4 é o quinto bit da direita para a esquerda.

Como desejamos setar apenas o bit 4, podemos criar uma máscara onde apenas o bit 4 seja 1 e realizar a operação | entre as duas sequências de bits, assim:

xxxx.xxxx
| 0001.0000
————-
xxx1.xxxx

Observe que com esta máscara, apenas o bit 4 é alterado, os demais mantêm o valor que já possuíam, zero ou um.

Programa de teste:

/*
    Setando um bit para 1
*/

int main( ){

    int a, b;

    a = 1; // 0000.0001
    b = a | (1 << 1);// 0000.0011 = 3
    printf("a: %d\tb: %d\n", a, b);

    b = a | (1 << 2);// 0000.0101 = 5
    printf("a: %d\tb: %d\n", a, b);

    b = a | (1 << 3);// 0000.1001 = 9
    printf("a: %d\tb: %d\n", a, b);

    return 0;
}

Deixe um comentário

4 + 3 =

Wagner Gaspar

Capixaba de São Gabriel da Palha, Espírito Santo. Bacharel em Ciência da Computação pela Universidade Federal do Amazonas e mestre em informática pela Universidade Federal do Espírito Santo.