Nesta aula vamos aprender como funciona o operador OU EXCLUSIVO ( ^ ) bit a bit na linguagem de programação C. Com esta operação é possível inverter o estado de um determinado bit, ligando se estiver desligado ou desligando se estiver ligado.
A operação bit a bit ^ (ou exclusivo) possui a seguinte tabela verdade.
| A | B | A ^ B |
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
A operação é realizada sobre cada bit e o resultado será 0 sempre que os dois bits da operação forem iguais e 1 quando forem diferentes.
Esta operação é útil quando precisamos inverter o estado de um bit. Seja a seguinte sequência de bits: xxxx.xx1x. Para inverter apenas o bit 1, ou seja, mudá-lo para zero, precisamos da máscara 0000.0010 e a operação ou exclusivo entre os dois, assim:
xxxx.xx1x
^ 0000.0010
————-
xxxx.xx0x
As posições em zero serão mantidas em zero pois serão iguais. As posições em 1 serão mantidas em 1 pois serão diferentes. O bit será desligado pois serão iguais.
Programa de teste:
/*
Operação ou exclusivo entre a e b
*/
int main(){
int a, b;
a = 73; // 01001001 (73 em binário)
b = a ^ (1 << 3); // 00001000 ( 1 << 3 ), para inverter o bit-3 = 65
printf("a: %d\tb: %d\n", a, b);
b = b ^ (1 << 3); // 00010000 ( 1 << 3 ), para inverter o bit-3 = 73
printf("a: %d\tb: %d\n", a, b);
return 0;
}
