# Java Bitwise: Introdução aos operadores bitwise em Java

Um operador bitwise em Java (*bitwise operator in Java*) permite que você manipule bits individualmente, da maneira como preferir. Ele pode ser útil para otimizar códigos, implementar máscaras de bits e flags, compactar dados, e implementar algorítmos e estruturas de dados. Os sete operadores bitwise existentes têm estruturas semelhantes e seguem regras fixas, fáceis de aprender. Nosso tutorial ensina a você.

## O que são e para que servem operadores bitwise em Java?

[Operadores em Java](https://www.ionos.com/digitalguide/websites/web-development/java-operators/ "Operadores em Java") são elementos de fundamental importância desta [linguagem de programação web](https://www.ionos.com/digitalguide/websites/web-development/web-programming-languages/ "Linguagens de Programação web"). Além de permitirem diversos tipos de ações e realizarem diferentes funções em códigos, operadores em Java possibilitam a manipulação das menores unidades de informação existentes: os bits. Bits (*binary digits*) adotam um sistema de numeração próprio, baseado nos valores 0 e 1. Por isso, para verificar valores binários em cada bit, programadores devem apelar aos operadores bitwise. Estes podem ser aplicados a **tipos de dados numéricos**, como a *byte*, *char*, *int*, *short* e *long*.

Embora você não seja obrigado a fazer uso do Java bitwise, aprender a utilizá-lo pode ser de extrema utilidade. *Bitwise operators in Java* **economizam espaço ao converter dados** e permitem a aplicação do **operador XOR**, assim como possibilitam a **alteração de um único bit**. Ainda, eles funcionam como base para todas as operações técnicas envolvendo circuitos mais complexos. Por esses e outros motivos, recomendamos que você conheça o funcionamento e a aplicação dos sete operadores Java bitwise.

## Quais são os tipos de operadores bitwise em Java?

Existem sete tipos de operadores Java bitwise. Para que possamos explicá-los melhor, pediremos ajuda a dois operandos fictícios, que chamamos aqui de “a” e “b”.

- **`~` (NOT Bit-a-Bit)**: Este operador realiza uma operação *NOT bitwise*, invertendo cada um dos bits. Assim, cada “0” será transformado em “1” e vice-versa.
- **`&` (AND Bit-a-Bit)**: Este operador realiza uma operação *AND bitwise* entre cada par de bits, retornando “1” se ambos os operandos também forem “1”. Caso contrário, “0”será retornado.
- **`|` (OR Bit-a-Bit)**: Este operador realiza uma operação *OR bitwise* entre cada par de bits, produzindo “1” se pelo menos um dos operandos também tiver esse valor.
- **`^` (XOR; OR exclusivo Bit-a-Bit)**: Este operador realiza uma operação *XOR (OR exclusivo) biwise*, retornando “0” se ambos os operandos tiverem o mesmo valor. Caso contrário, ele retornará “1”.
- **`<<` (Deslocamento para a esquerda)**: Este operador desloca o operando “a” por “b” posições para a esquerda. Se a operação gerar espaços vazios, estes serão preenchidos com “0”.
- **`>>` (Deslocamento para a direita com sinal; aritmético)**: Este operador desloca os bits de “a” por “b” posições para a direita. Se o bit de sinal já tiver sido definido, este permanecerá definido; números negativos permanecem negativos.
- **`>>>` (Deslocamento para a direita sem sinal; lógico)**: Este operador desloca os bits de “a” por “b” posições para a direita; espaços vazios são sempre preenchidos com “0”, ignorando o bit de sinal.

## Java bitwise NOT Bit-a-Bit

O operador Java bitwise *NOT Bit-a-Bit* é representado pelo til (`~`). Ele **nega todos os bits**, transformando cada zero (0) em um (1), e vice-versa. Considere, por exemplo, o número 20: em formato binário, ele é representado como *10100*. Assim, ao aplicarmos esse *bitwise operator in Java*, invertemos um dos bits (*10100* se torna *01011*) — esse é o valor da expressão `~20`. Agora, ao convertermos o resultado binário para decimal, obtemos *-21*.

Se você quer testar a operação bitwise *NOT Bit-a-Bit* em um código, insira este [comando em Java](https://www.ionos.com/digitalguide/websites/web-development/java-commands/ "Comandos em Java"), `System.out.println`, no seu terminal, para obter a saída correspondente:

```java
public class Main {
	public static void main(String[] args) {
	int Valor1 = 20;
	System.out.println(~Valor1);
}
}
```

Se você tiver digitado tudo corretamente, deverá obter o resultado *-21*.

## Java bitwise AND Bit-a-Bit

O operador Java bitwise *AND Bit-a-Bit* (`&`) **compara dois números, bit a bit, em formato binário**: o primeiro bit do primeiro número é comparado ao primeiro bit do segundo número; o segundo com o segundo bit e assim por diante. Se ambos os bits forem *1*, o valor *1* será retornado. Contudo, se ambos os bits ou apenas um deles for 0, o valor 0 será retornado. A título de exemplo, usamos os números decimais *18* e *25*. Na forma binária, 18 é representado por *10010* e 25 por *11001*. Com o operador bitwise AND, desejamos comparar esses dois números, obtendo um terceiro número como resultado — para uma melhor compreensão, posicionamos os dois números binários um abaixo do outro:

18 = 10010 25 = 11001

Observe que os dois primeiros bits são 1 em ambos os números. Assim, nosso número de saída também começará com 1. Embora o segundo bit de 25 também seja 1, o segundo bit de 18 é 0, o que fará com que o resultado dessa operação seja 0. Ao compararmos todos os bits, um a um, finalmente obteremos o número binário *10000* que, convertido em número decimal, torna-se 16.

No nosso código, executamos essa operação bitwise em Java da seguinte forma:

```java
public class Main {
	public static void main(String[] args) {
	System.out.println(18&25);
}
}
```

Ao colar esse código no seu terminal, você obterá o resultado *16*.

## Java bitwise OR Bit-a-Bit

O operador Java bitwise *OR Bit-a-Bit* (`|`) também compara pares de bits. Ao utilizá-lo, bastará que apenas um dos dois operandos tenha o valor 1 para que o resultado também passe a ser 1. Tomemos novamente os números 18 e 25 como exemplo:

18 = 10010 25 = 11001

Como todos os bits, exceto o terceiro, contêm pelo menos um valor *1*, o valor gerado pela operação é *11011*, equivalente ao número decimal *27*.

Assim seria a aplicação, em um código, desse *bitwise operator in Java*:

```java
public class Main {
	public static void main(String[] args) {
	System.out.println(18|25);
}
}
```

## Java bitwise XOR

O operador Java bitwise *XOR*, ou OR exclusivo (`^`), é semelhante ao operador bitwise *OR*. No entanto, enquanto *OR* exige que um ou ambos os operandos sejam 1, *XOR* só retorna 1 se **exatamente um dos dois valores** também for 1. O exemplo abaixo esclarece o conceito:

18 = 10010 25 = 11001

Observe que os dois primeiros bits têm o valor *1*, que é transformado em 0 por este operador Java bitwise. Por outro lado, o segundo bit de 18 é 0 enquanto o de 25 é *1*. Assim, o valor resultante também será *1*. Ao executarmos a operação em todos os bits, obtemos esta terceira combinação: *01011*, equivalente ao número decimal *11*.

O código dessa operação bitwise XOR é o seguinte:

```java
public class Main {
	public static void main(String[] args) {
	System.out.println(18^25);
}
}
```

## Java bitwise de deslocamento para a esquerda

Uma operação Java bitwise de deslocamento para a esquerda (`<<`) desloca os bits de valor “a” para a esquerda, pela distância “b”. Nesse tipo de operação, **espaços em branco do resultado são preenchidos com 0**. Exemplo clássico é o valor int que ocupa 32 bits de uma memória. Nosso exemplo tomará o número decimal 20 (*10010*) e o deslocará pelo valor “b” 2, para obter o valor “c” *1001000*. Observe que, nesse caso, dois zeros são adicionados ao final da sequência: *1001000* (correspondente ao número decimal 72).

Para deslocar bits para a esquerda com uma operação Java bitwise, baseie-se no exemplo de código abaixo:

```java
public class Main {
	public static void main(String[] args) {
	int a = 20;
	int b = 2;
	int c = (a << b);
	System.out.println(c);
}
}
```

## Java bitwise de deslocamento para a direita com sinal

Uma operação Java bitwise de deslocamento para a direita com sinal (`>>`) funciona da maneira exatamente oposta à operação de deslocamento para a esquerda. Como o nome já diz, o deslocamento à direita move, para a direita, os bits do valor “a” por um valor “b” , obtendo o valor “c”. Nesse tipo de operação, **os últimos bits são eliminados**. No nosso exemplo, deslocamos o valor 20 (*10010*) duas posições para a direita, obtendo o resultado *100* (número decimal 4).

O código abaixo detalha a operação:

```java
public class Main {
	public static void main(String[] args) {
	System.out.println(20 >> 2);
}
}
```

Observe que a operação Java bitwise de deslocamento à direita preenche espaços em branco com 0, mas somente quando “a” é um número positivo. Caso ele seja negativo, os espaços em branco serão preenchidos com 1.

## Java bitwise de deslocamento para a direita sem sinal

O operador Java bitwise de deslocamento para a direita sem sinal (`>>>`) funciona basicamente da mesma maneira que o outro operador de deslocamento para a direita. A diferença está no fato de que o operador para a direita sem sinal **sempre preenche com 0** os espaços em branco que surgem do lado esquerdo do valor deslocado para a direita. Dessa forma, essa operação bitwise sempre resultará em valores positivos, mesmo que os valores iniciais sejam negativos.


This is a markdown version of: [https://www.ionos.com/pt-br/digitalguide/sites-de-internet/desenvolvimento-web/java-bitwise/](https://www.ionos.com/pt-br/digitalguide/sites-de-internet/desenvolvimento-web/java-bitwise/) for AI/LLM consumption.