Introdução à manipulação de bits

Normalmente, um programador trabalha com variáveis ​​de tipos de dados como int, float, double, String ou coleções como Array, List, ArrayList e assim por diante. Em alguns casos, os programadores precisam aprofundar muito mais os dados no byte e no nível de bits para extrair e manipular os dados. Idiomas como Java e C # permitem manipular dados no nível de bits, o que significa que você tem acesso a um bit específico em um byte. Neste tópico, vamos aprender sobre a manipulação de bits em Java.

A manipulação de bits geralmente é necessária quando se trabalha com compactação de dados e criptografia de dados, onde o programador precisa extrair dados no nível de bit para codificar, decodificar ou compactar os dados originais. Existem muitas outras aplicações de manipulação de bits que veremos mais adiante neste artigo.

Java suporta operadores de turno de 3 bits e 4 bit a bit para executar operações no nível de bit. Esses operadores podem ser usados ​​em tipos integrais (int, curto, longo e byte) para executar operações no nível de bit.

Operadores Java Bitwise e Bitshift

OperadorDescrição
&AND bit a bit
|OR bit a bit
~Complemento bit a bit
<<Desvio à esquerda
>>Deslocamento para a direita
^Bitwise XOR
>>>Deslocamento à direita não assinado

Operadores de manipulação de bits em Java

vamos dar uma olhada nos operadores em mais detalhes

1) OR bit a bit

Este é um operador binário que recebe 2 operandos e é indicado pelo símbolo “| ". O operador bit a bit compara os bits correspondentes dos dois operandos. Se algum bit do operando for 1, a saída será 1, caso contrário, será 0.

Exemplo

15 = 00001111 (In Binary)
27 = 00011011 (In Binary)
Bitwise OR Operation of 15 and 27
00001111
| 00011011
________
00011111 = 31 (In decimal)

Programa Java

class BitwiseOR (
public static void main(String() args) (
int operand1 = 15, operand2 = 27, output
output= operand1 | operand2;
System.out.println(output);
)
)

Saída: 31

2) Bit a bit E

Este também é um operador bit a bit que recebe 2 operandos e é indicado pelo símbolo "&". o operador bit a bit compara os bits correspondentes dos dois operandos. Se os dois bits do operando forem 1, a saída será 1, caso contrário, 0.

Exemplo

15 = 00001111 (In Binary)
27 = 00011011 (In Binary)
Bitwise AND Operation of 15 and 27
00001111
| 00011011
________
00001011 = 11 (In decimal)

Programa Java

class BitwiseAND (
public static void main(String() args) (
int operand1 = 15, operand2 = 27, output
output= operand1 & operand2;
System.out.println(output);
)
)

Saída: 11

3) Complemento bit a bit

Ao contrário dos outros dois operadores que discutimos até agora, isso leva apenas um operando e é indicado pelo símbolo "~". Este operador inverte o bit do operando. Se o bit do operando for 0, ele o converterá em 1 e vice-versa.

Exemplo

15 = 00001111 (In Binary)
Bitwise complement Operation of 15
~ 00001111
________
11110000 = 240 (In decimal)

Programa Java

class BitwiseComplement (
public static void main(String() args) (
int operand= 15, output;
output= ~operand;
System.out.println(output);
)
)

Saída: -16

Nota: quando você executa o programa Java, obtém -16 como saída em vez de 240, porque o compilador mostra o complemento de 2 desse número, ou seja, noção negativa do número binário.

O complemento de 2 de qualquer número é equivalente a - (n + 1) onde n é o número cujo complemento de 2 deve ser calculado. No nosso caso, o complemento 2 do operando 15 é -16, que também é a saída do programa.

4) XOR bit a bit

O Bitwise XOR é um operador binário que recebe 2 operandos e denota com o símbolo “^”. esse operador compara os bits correspondentes dos dois operandos. Se os bits correspondentes dos dois operandos forem diferentes, ele fornecerá 1 como saída 0.

O operador XOR bit a bit é equivalente a (OR bit a bit + complemento bit a bit)

Exemplo

15 = 00001111 (In Binary)
27 = 00011011 (In Binary)
Bitwise XOR Operation of 15 and 27
00001111
00011011
________
00010100 = 20 (In decimal)

Programa Java

class BitwiseXor (
public static void main(String() args) (
int operand1= 15, operand2 = 27, output;
output = operand1 operand2;
System.out.println(output);
)
)

Saída: 20

5) Turno à esquerda assinado

O operador de mudança de bit à esquerda muda o padrão de bit para a esquerda por um determinado número de vezes especificado no operando. O operador de mudança à esquerda é indicado pelo símbolo "<<".

Exemplo

123 (In binary: 01111011)
123 << 1 evaluates to 246 (In binary: 011110110)
123 << 2 evaluates to 492 (In binary: 0111101100)
123 << 3 evaluates to 984 (In binary:01111011000)

Programa Java

class LeftShiftOperator (
public static void main(String() args) (
int operand = 123;
System.out.println(operand << 1);
System.out.println(operand << 2);
System.out.println(operand << 3);
)
)

saída: 246, 492, 984

6) Shift direito assinado

O operador de mudança à direita assinado funciona exatamente da mesma forma que o operador de mudança à esquerda, apenas adicionando zero bits e mudando para a posição de ordem superior.

Exemplo

123 (In binary: 01111011)
123 >> 1 evaluates to 61 (In binary: 00111101)
123 >> 2 evaluates to 30 (In binary: 00011110)
123 >> 3 evaluates to 15 (In binary:00001111)

Programa Java

class RightShiftOperator (
public static void main(String() args) (
int operand = 123;
System.out.println(operand >> 1);
System.out.println(operand >> 2);
System.out.println(operand >> 3);
)
)

Saída: 61, 30, 15

7) Mudança para a direita sem sinal

O operador de deslocamento à direita desloca zero para a posição mais à esquerda pelo número determinado de bits especificado no operando.

Programa Java

class UnSignedRightShiftOperator (
public static void main(String() args) (
int operand = 123;
System.out.println(operand >>> 1);
System.out.println(operand >>> 2);
System.out.println(operand >>> 3);
)
)

Saída : 61, 30, 15

Conclusão - Manipulação de bits em Java

Agora que chegamos ao final do artigo, vamos encerrar resumindo o ponto principal que discutimos neste artigo. Vimos o que é um pouco de manipulação e seus diferentes casos de uso. Também aprendemos os diferentes tipos de operadores bit a bit (Bitwise AND, Bitwise OR, Bitwise Complement e Bitwise XOR) e operadores de deslocamento de bits (operador de deslocamento à esquerda assinado, operador de deslocamento à direita assinado e operadores de deslocamento à direita não assinados), juntamente com um exemplo e uma amostra Programa Java que explica operadores individuais.

Artigos recomendados

Este é um guia para manipulação de bits em Java. Aqui discutimos os Java Bitwise e Bitshift Operators em detalhes com exemplos e programas Java e sua saída. Você também pode consultar o seguinte artigo para saber mais -

  1. O que é a interface Java?
  2. Ferramentas Java
  3. Frameworks Python
  4. Operadores booleanos em Java