1. &Operador bit a bit

Dissemos anteriormente que todos os dados são armazenados na memória em uma representação binária. Há muito tempo, os programadores criaram muitas maneiras interessantes de trabalhar com números binários. Por exemplo, Java possui operadores lógicos que operam nos bits da representação binária de um número: &(AND), | (OR), ~(NOT ou complemento) e ^(XOR - exclusivo ou).

a & b
Operador bit a bit &(AND)

Este operador é muito semelhante ao &operador lógico (AND), só que é denotado por um único e comercial, não dois:

E é aplicado a bits individuais. Cada operando é tratado como um array de bits, e o ith bit do resultado é calculado usando o ith bit de cada um dos dois operandos.

O primeiro bit do resultado será calculado com base no primeiro bit do número a e no primeiro bit do número b, o segundo bit - com base no segundo bit do número a e no segundo bit do número b, etc.

O &operador (AND) significa "o bit resultante é igual a um somente se o bit correspondente do número afor igual a um, ANDo bit correspondente do número bfor igual a um":

1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0

Exemplos:

Exemplo Resultado
0b0011 & 0b1010
0b0010
0b1111 & 0b0000
0b0000
0b1010 & 0b0101
0b0000
0b1111 & 0b1010
0b1010

2. |Operador bit a bit

Este operador é muito semelhante ao |operador lógico (OR), só que é denotado por uma única linha vertical, não duas:

a | b

E é aplicado a bits individuais. Cada operando é tratado como um array de bits, e o i-ésimo bit do resultado é calculado usando o i-ésimo bit de cada um dos dois operandos.

O |operador bit a bit (OR) significa "o bit resultante é igual a um se o bit correspondente do número afor igual a um, ORo bit correspondente do número bé igual a um":

1 | 1 = 1
1 | 0 = 1
0 | 1 = 1
0 | 0 = 0

Exemplos:

Exemplo Resultado
0b0011 | 0b1010
0b1011
0b1110 | 0b0000
0b1110
0b1010 | 0b0101
0b1111
0b1111 | 0b1010
0b1111

Somente quando os bits correspondentes (os bits na mesma posição) de ambos os números são zero é que o bit correspondente do resultado é igual a zero.



3. ^Operador bit a bit (XOR ou "exclusivo ou")

O XORoperador, também pronunciado exclusivo ou , é denotado pelo ^símbolo. Para inseri-lo no teclado, pressione shift + 6 (em um layout de teclado em inglês).

a ^ b

Este operador é um pouco semelhante ao ORoperador, inclusive por ter um nome semelhante:XOR

O ^operador bit a bit (XOR) significa "o bit resultante é igual a um se o bit correspondente do número afor igual a um, ORo bit correspondente do número bé igual a um, mas não ambos ao mesmo tempo":

1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 1 = 1
0 ^ 0 = 0

Exemplos:

Exemplo Resultado
0b0011 ^ 0b1010
0b1001
0b1110 ^ 0b0000
0b1110
0b1010 ^ 0b0101
0b1111
0b1111 ^ 0b1010
0b0101

Somente quando os bits correspondentes (os bits na mesma posição) de ambos os números são diferentes , o bit correspondente do resultado é igual a um . Se os bits forem iguais , o bit resultante será igual a zero .



4. ~Operador bit a bit (NOT, COMPLEMENT)

Acho que você já pode adivinhar o que ele faz. Este operador é muito semelhante ao !operador lógico (NOT), mas é indicado por um til , não por um ponto de exclamação:

~a

Este é um operador unário , o que significa que se aplica a um único número, não a dois. Ele aparece antes deste único operando.

O ~operador bit a bit significa "o bit resultante é um se o bit correspondente do número afor zero e é zero se o bit correspondente do número afor um":

~1 = 0
~0 = 1

Exemplos:

Exemplo Resultado
~0b0011
0b1100
~0b0000
0b1111
~0b0101
0b1010
~0b1111
0b0000

Este operador simplesmente muda o bit que está 1para 0e os bits que estão 0para 1.