Fala, meus consagrados! Tudo beleza com vocês?
Vamos entender como utilizar os operadores de AND &, OR | e XOR ^ na linguagem Java.
Teoria
Os operadores de bits trabalham em nível de bits e com operandos numéricos. Para fazermos as operações de bits, primeiro, os transformamos os operandos da base decimal para a base binária e depois aplicamos as operações bit a bit para os operandos.
Os operadores AND, OR e XOR operam sobre literais inteiros. Os dois tipos dos literais inteiros em Java são:
- int (sendo esse o padrão); e
- long.
Como os operadores AND &, OR | e XOR ^ funcionam?
- Para o AND, o resultado é um bit 1, se TODOS forem 1;
- Para o OR, o resultado é um bit 1, se PELO MENOS um bit for 1; e
- Para o XOR, o resultado é um bit 1, se os bits forem DIFERENTES.
Caso os operandos sejam booleanos, o resultado será idêntico ao obtido com operadores AND condicional e OR condicional, porém sem curto-circuito, ou seja, todos os operandos serão avaliados, mesmo sem necessidade.
Os operadores condicionais AND && e OR || possuem dois símbolos cada. Já os de bits AND & e OR | possuem apenas um cada.
Exemplos:
byte x = 93 & -21; // x recebe 73. byte y = 93 | -21; // x recebe -1. byte z = 93 ^ -21; // x recebe -74.
Para visualizarmos como chegamos ao resultado, veja a tabela 1.
Valor inicial |
128 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
Valor final |
93 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
93 |
-21 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
-21 |
& |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
73 |
| |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
-1 |
^ |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
-74 |
Tabela 1: Visualizando o resultado das operações com os operadores AND &, OR | e XOR ^.
De acordo com a tabela 1, transformamos os valores 93 e -21 para a base binária e depois aplicamos os operadores. Com o resultado na base binária, transformamos para a base decimal e encontramos o resultado de cada operação:
- 93 AND –21 é 73;
- 93 OR –21 é –1; e
- 93 XOR –21 é 74.
Questões de concursos
[FGV 2021 IMBEL – Supervisor – Tecnologia de Informação] Com relação aos operadores bitwise do Java, considere os valores binários
a = 00111100 b = 00001101
Os valores resultantes das operações a&b e a|b são, respectivamente,
[A] 00011100 e 11111101
[B] 00001100 e 00111101
[C] 00001111 e 00111111
[D] 11001110 e 00001100
[E] 01101100 e 00100101
Comentários:
A questão pede o resultado de a & b e a | b. Como as variáveis a e b já estão na base binária, basta aplicar os operadores bit a bit e saber o resultado de cada operação.
Variável e operação |
128 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
a |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
b |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
& |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
| |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
^ |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
De acordo com a tabela acima, temos:
a & b = 000001100 a | b = 00111101
Com isso, a letra b é o nosso gabarito.
Coloquei também o resultado com XOR ^ apenas para treinarmos:
a ^ b = 00110001
Gabarito: letra b.
Então é isso!
[]s e até a próxima!
_________________________
Professor Rogerão Araújo