image

Acesse bootcamps ilimitados e +650 cursos pra sempre

60
%OFF
Article image
Letícia Palaro
Letícia Palaro03/11/2022 18:38
Compartilhe

Entenda os Operadores Lógicos, Bitwise e Bit Shift!

  • #Java

Para entender Bitwise e Bit Shift, primeiro vamos relembrar os operadores lógicos das aulas:

Operadores Lógicos

Conjunção

Operação Lógica que só é verdadeira quando ambos os operandos ou expressões são verdade.

Os dois lados precisam ser TRUE para o resultado ser TRUE.

Se apenas um lado for FALSE, o resultado será FALSE.

Simbologia: &&

Terminologia: AND

image

Disjunção

Operação Lógica que só é falsa quando ambos os operandos ou expressões são falsos.

Tendo TRUE em pelo menos um lado a operação será TRUE.

Para ser FALSE os dois lados precisam ser FALSE.

Simbologia: ||

Terminologia: OR

image

Disjunção Exclusiva

Operação Lógica que só é verdadeira quando ambos os operandos ou expressões são opostos.

Para ser TRUE os dois lados precisam ser diferentes.

Para ser FALSE os dois lados precisam ser iguais.

Simbologia: ^

Terminologia: XOR

image

Negação

Operação que inverte o valor lógico de um operando ou expressão.

Simbologia: !

Terminologia: inversão

image

Considerando a lógica acima, vamos ao bitwise.

Em Java é possível realizar algumas operações lógicas entre valores numéricos inteiros. Neste caso, as operações lógicas ocorrem no nível de bits dos números, ou seja, as operações lógicas ocorrem com as representações binárias dos números.

Para realizar uma operação lógica com números inteiros (a nível de bits) com java basta utilizarmos os operadores:

& (AND - E)

| (OR - OU)

^ (XOR - OU EXCLUSIVO).

No mesmo sentido dos operadores lógicos. Agora vamos considerar o código abaixo.

public class OperacoesBitwise {
public static void main(String[] args) {
int a = 10;
int b = 12;
System.out.println(a + " | " + b + " = " + (a | b));
System.out.println(a + " & " + b + " = " + (a & b));
System.out.println(a + " ^ " + b + " = " + (a ^ b));
a = 9;
b = 7;
System.out.println(a + " | " + b + " = " + (a | b));
System.out.println(a + " & " + b + " = " + (a & b));
System.out.println(a + " ^ " + b + " = " + (a ^ b));
}
}

A saída será a seguinte:

10 | 12 = 14
10 & 12 = 8
10 ^ 12 = 6
9 | 7 = 15
9 & 7 = 1
9 ^ 7 = 14

Entendendo o resultado

  1. Como esta operação acontece no nível binário, primeiro termos que converter os números para binário.
  2. Com a conversão em binário de 10 e 12, podemos seguir para o passo a passo.

Conversão em binário:

image

AND - E

Considere 1 como TRUE e o 0 como FALSE:

image

OR - OU

Considere 1 como TRUE e o 0 como FALSE:

image

XOR - OU EXCLUSIVO

Considere 1 como TRUE e o 0 como FALSE:

image

Como treino para reforçar o entendimento, vocês podem fazer a operação entre 9 e 7. 😉

Operadores de Bit Shift

Também trabalham com números inteiros a nível de bits, porém o seu trabalho está no deslocamento aritmético e deslocamento lógico.

Parece complexo? Apenas um pouco, ele apenas desloca os 0 e 1 para esquerda ou direita.

Deslocamento aritmético: << ou >>

Deslocamento lógico: >>>

Atenção: Não existe o operador <<< porque tanto o deslocamento aritmético quanto o deslocamento lógico para esquerda se comportam da mesma maneira.

Vamos analisar cada um dos operadores.

Operador <<

Título da coluna = operação realizada

1º linha número normal

2º linha a operação. Vermelho removido. Verde adicionado.

3º linha resultado final

image

Operador >>

Título da coluna = operação realizada

1º linha número normal

2º linha a operação. Vermelho removido. Verde adicionado.

3º linha resultado final

image

Operador >>>

Título da coluna = operação realizada

1º linha número normal

2º linha a operação. Vermelho removido. Verde adicionado.

3º linha resultado final

image

Conversão em binário

Para entender como converter um número em binário:

De exemplo o número 25, estamos convertendo ele base uma base 2 (binário), então vamos pegar o número 25 e dividir ele repetidamente por 2, até o resultado da divisão ser menor que 2. Note que o resto da divisão sempre será 0 ou 1.

25 / 2 = 12 com resto 1

12 / 2 = 6 com resto 0

6 / 2 = 3 com resto 0

3 / 2 = 1 com resto 1

Deixei em laranja os números que iremos utilizar para fazer o binário.

Primeiro pegamos o último resultado e depois pegamos os restos da última divisão feita seguindo em direção a primeira divisão feita.

25 em binário = (resultado da divisão 3/2) + (resto da divisão 3/2) + (resto da divisão 6/2) + (resto da divisão 12/2) + (resto da divisão 25/2)

25 em binário = 1 1 0 0 1

E a situação inversa? Binário para decimal?

Primeiro temos que organizar o número em uma série de potencias de 2 baseado em sua posição:

image

Ou seja, o último fica com 2⁰, o penúltimo 2¹, assim por diante. Agora vamos seguir.

Você vai pegar as potências de 2, calcular o resultado e multiplicar pelo bit.

image

Pra ficar mais claro, em azul o resultado da potência, em laranja o número em bit, em verde o resultado da potência multiplicado pelo bit.

2⁰ = 1 * 1 = 1

2¹ = 2 * 0 = 0

2² = 4 * 0 = 0

2³ = 8 * 1 = 8

2 = 16 * 1 = 16

Agora vamos somar o resultado (números em verde):

1 + 0 + 0 + 8 + 16 = 25

É isso 😁

Compartilhe
Comentários (6)
Antonio Neto
Antonio Neto - 05/11/2022 23:00

Parabéns Letícia Palaro, ótimo conteúdo, vai ajudar muito as pessoas que estiverem buscando-o


Daniel Araújo
Daniel Araújo - 04/11/2022 16:14

Interessante, não conhecia essa terminologia

Kelvin Marques
Kelvin Marques - 04/11/2022 10:51

excelente conteúdo, parabéns!

WS

Wilson Santos - 04/11/2022 02:16

Muito bom, alguns eu recordei

William Angelis
William Angelis - 04/11/2022 00:00

Mais um artigo de qualidade, parabéns

Thiago Henrique
Thiago Henrique - 03/11/2022 19:07

Estudo fino!

Muito bom esse artigo, super recomendo!