Um operador bitwise em Java (bitwise operator in Java) permite que você manipule bits in­di­vi­du­al­mente, da maneira como preferir. Ele pode ser útil para otimizar códigos, im­ple­men­tar máscaras de bits e flags, compactar dados, e im­ple­men­tar al­go­rít­mos e es­tru­tu­ras de dados. Os sete ope­ra­do­res bitwise exis­ten­tes têm es­tru­tu­ras se­me­lhan­tes e seguem regras fixas, fáceis de aprender. Nosso tutorial ensina a você.

O que são e para que servem ope­ra­do­res bitwise em Java?

Ope­ra­do­res em Java são elementos de fun­da­men­tal im­por­tân­cia desta linguagem de pro­gra­ma­ção web. Além de per­mi­ti­rem diversos tipos de ações e re­a­li­za­rem di­fe­ren­tes funções em códigos, ope­ra­do­res em Java pos­si­bi­li­tam a ma­ni­pu­la­ção das menores unidades de in­for­ma­ção exis­ten­tes: 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, pro­gra­ma­do­res devem apelar aos ope­ra­do­res 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 eco­no­mi­zam espaço ao converter dados e permitem a aplicação do operador XOR, assim como pos­si­bi­li­tam a alteração de um único bit. Ainda, eles funcionam como base para todas as operações técnicas en­vol­vendo circuitos mais complexos. Por esses e outros motivos, re­co­men­da­mos que você conheça o fun­ci­o­na­mento e a aplicação dos sete ope­ra­do­res Java bitwise.

Hos­pe­da­gem que se adapta às suas ambições
  • Fique online com 99,99% de tempo de atividade e segurança robusta
  • Aumente o de­sem­pe­nho com um clique à medida que o tráfego cresce
  • Inclui domínio gratuito, SSL, e-mail e suporte 24 horas por dia, 7 dias por semana

Quais são os tipos de ope­ra­do­res bitwise em Java?

Existem sete tipos de ope­ra­do­res 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, in­ver­tendo cada um dos bits. Assim, cada “0” será trans­for­mado em “1” e vice-versa.
  • & (AND Bit-a-Bit): Este operador realiza uma operação AND bitwise entre cada par de bits, re­tor­nando “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, pro­du­zindo “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, re­tor­nando “0” se ambos os operandos tiverem o mesmo valor. Caso contrário, ele retornará “1”.
  • << (Des­lo­ca­mento 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 pre­en­chi­dos com “0”.
  • >> (Des­lo­ca­mento para a direita com sinal; arit­mé­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 per­ma­ne­cerá definido; números negativos per­ma­ne­cem negativos.
  • >>> (Des­lo­ca­mento 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 pre­en­chi­dos com “0”, ignorando o bit de sinal.

Java bitwise NOT Bit-a-Bit

O operador Java bitwise NOT Bit-a-Bit é re­pre­sen­tado pelo til (~). Ele nega todos os bits, trans­for­mando cada zero (0) em um (1), e vice-versa. Considere, por exemplo, o número 20: em formato binário, ele é re­pre­sen­tado como 10100. Assim, ao apli­car­mos esse bitwise operator in Java, in­ver­te­mos um dos bits (10100 se torna 01011) — esse é o valor da expressão ~20. Agora, ao con­ver­ter­mos 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, System.out.println, no seu terminal, para obter a saída cor­res­pon­dente:

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

Se você tiver digitado tudo cor­re­ta­mente, 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 é re­pre­sen­tado 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 com­pre­en­são, po­si­ci­o­na­mos 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 com­pa­rar­mos todos os bits, um a um, fi­nal­mente obteremos o número binário 10000 que, con­ver­tido em número decimal, torna-se 16.

No nosso código, exe­cu­ta­mos essa operação bitwise em Java da seguinte forma:

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

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, equi­va­lente ao número decimal 27.

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

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

Java bitwise XOR

O operador Java bitwise XOR, ou OR exclusivo (^), é se­me­lhante ao operador bitwise OR. No entanto, enquanto OR exige que um ou ambos os operandos sejam 1, XOR só retorna 1 se exa­ta­mente 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 é trans­for­mado em 0 por este operador Java bitwise. Por outro lado, o segundo bit de 18 é 0 enquanto o de 25 é 1. Assim, o valor re­sul­tante também será 1. Ao exe­cu­tar­mos a operação em todos os bits, obtemos esta terceira com­bi­na­ção: 01011, equi­va­lente ao número decimal 11.

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

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

Java bitwise de des­lo­ca­mento para a esquerda

Uma operação Java bitwise de des­lo­ca­mento 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 pre­en­chi­dos 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 adi­ci­o­na­dos ao final da sequência: 1001000 (cor­res­pon­dente 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:

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

Java bitwise de des­lo­ca­mento para a direita com sinal

Uma operação Java bitwise de des­lo­ca­mento para a direita com sinal (>>) funciona da maneira exa­ta­mente oposta à operação de des­lo­ca­mento para a esquerda. Como o nome já diz, o des­lo­ca­mento à 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 eli­mi­na­dos. No nosso exemplo, des­lo­ca­mos 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:

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

Observe que a operação Java bitwise de des­lo­ca­mento à 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 pre­en­chi­dos com 1.

Java bitwise de des­lo­ca­mento para a direita sem sinal

O operador Java bitwise de des­lo­ca­mento para a direita sem sinal (>>>) funciona ba­si­ca­mente da mesma maneira que o outro operador de des­lo­ca­mento 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.

Ir para o menu principal