operadores lógicos bit a bit
operadores lógicos bit a bit
Existem operadores lógicos de 4 bits: & (e), | (ou), ~ (não) e ^ (ou exclusivo). Com exceção de ~ (negação bit a bit), que é um operador unário, o restante são operadores binários. Seu uso básico está listado na Tabela 1.
operador | significado | exemplo | resultado |
---|---|---|---|
& | Operação AND bit a bit (AND) | 4 e 5 | 4 |
| | Operação OR bit a bit (OR) | 4 | 5 | 5 |
^ | OU exclusivo bit a bit (XOR) | 4 ^ 5 | 1 |
~ | Operação de negação bit a bit (NOT) | ~ 4 | -5 |
Operador AND bit a bit
O operador bit AND é &
, e suas regras de operação são: os números envolvidos na operação são alinhados na ordem inferior e a ordem superior é preenchida com zeros. Se o bit binário correspondente for 1 ao mesmo tempo, o resultado do cálculo é 1, caso contrário é 0. Portanto, o resultado do AND bit a bit de qualquer número com 0 é 0.
Por exemplo a seguinte expressão:
100&0
A Figura 1 mostra o processo de operação e o resultado é 0.
Figura 1 O processo de operação de 100 bits e 0
A seguir está o processo de execução de uma operação AND bit a bit em dois números diferentes de zero.
int x = 5,y = 12; // 创建整型变量保存两个数int z = x&y; // 对这两个数进行位与运算,结果保存到z
Depois que essas duas linhas de instruções são executadas, o valor da variável Z é 4. A Figura 2 mostra o processo de operação.
Figura 2 O processo de operação de 5 bits e 12
operador OR bit a bit
O operador bit OR é |
, e suas regras de funcionamento são: os números envolvidos na operação são alinhados na ordem inferior, sendo que a ordem superior é insuficiente para ser preenchida com zeros. Se apenas um dos bits binários correspondentes for 1, o resultado será 1; se os bits binários correspondentes forem todos 0, o resultado será 0.
Abaixo está uma expressão usando o operador OR bit a bit.
11|7
O resultado da operação é 15, e a Figura 3 mostra seu processo de operação.
Figura 3 O processo de operação de 11 ou 7
Operador XOR bit a bit
O operador OR exclusivo de bit é ^
, e suas regras de operação são: os números envolvidos na operação são alinhados na ordem inferior, e a ordem superior é insuficiente para preencher zero. Se os bits binários correspondentes forem iguais (ambos 0 ou 1 ao mesmo tempo), o resultado é 0; se os bits correspondentes forem diferentes, o resultado é 1.
Abaixo está uma expressão usando o operador XOR bit a bit.
11^7
O resultado da operação é 12, e a Figura 4 mostra seu processo de operação.
Figura 4 Processo de operação do XOR 7 de 11 bits
Dica: Em algumas linguagens de alto nível, o operador é usado ^
como um operador de exponenciação e deve-se prestar atenção à distinção.
operador de negação de bit
O operador de inversão de bits é ~
, e sua regra de operação é: apenas um operando é operado, e o 1 no binário do operando é alterado para 0 e o 0 é alterado para 1.
Abaixo está uma expressão usando o operador de negação bit a bit.
~10
O resultado da operação é 65525 e a Figura 5 mostra seu processo de operação.
Figura 5 O processo de operação de inverter 10 bits
Podemos usar o seguinte programa para verificar o resultado desta operação.
int i = 10;System.out.printf("%d \n",~i);
Compile e execute o programa acima e você descobrirá que a saída é -11 em vez de 65525. Isso ocorre porque o resultado após a negação é um número hexadecimal e %d é usado no programa acima para converter a saída em um número decimal.
Você pode usar a instrução a seguir para exibir os resultados hexadecimais.
int i=10;System.out.printf("%x \n",~i);
Você pode ver que o resultado de saída é fff5, que é 1111111111110101 quando convertido em binário. O bit mais alto desse número binário é 1, indicando que o número é negativo. Além do bit mais alto, adicione 1 à inversão bit a bit para obter o código binário original 1000000000001011, que é -11 em decimal.
Nota: Os operandos dos operadores de bit só podem ser dados inteiros ou de caractere e suas variantes, não para tipos de dados complexos como float, double ou long.
operador de turno
Operadores de deslocamento são usados para mover um operando em uma determinada direção (esquerda ou direita) por um número especificado de dígitos binários. A Tabela 2 lista dois operadores de deslocamento na linguagem Java, ambos operadores binoculares.
Deslocar um bit para a direita equivale a dividir por 2, deslocar n bits equivale a dividir por 2 n 2^n2n poder
operador | significado | exemplo | resultado |
---|---|---|---|
» | operador de turno à direita | 8»1 | 4 |
« | operador de turno esquerdo | 9«2 | 36 |
operador de turno esquerdo
O operador de deslocamento à esquerda é «
, e sua regra de operação é: deslocar todos os números para a esquerda pelo número correspondente de dígitos na forma binária, remover o bit superior (descartar) e preencher a vaga no bit inferior com zero.
Por exemplo, o processo de deslocar o inteiro 11 para a esquerda em 1 bit é mostrado na Figura 6.
Figura 6 Processo de operação de deslocamento de 11 para a esquerda em 1 bit
Como pode ser visto na Figura 6, todos os bits binários do número original são deslocados 1 bit para a esquerda. O bit 0 mais alto originalmente localizado à esquerda é deslocado e descartado e, em seguida, 0 é adicionado ao final para compor o bit. O resultado final é 22, o que equivale a duas vezes o número original.
operador de turno à direita
O operador de deslocamento à direita é »
, e sua regra de operação é: mova todos os números para a direita pelo número correspondente de dígitos na forma binária, remova os bits baixos (descarte) e preencha os bits altos com zeros.
Por exemplo, o processo de deslocar o inteiro 11 para a direita em 1 bit é mostrado na Figura 7.
Figura 7 Processo de operação de deslocamento de 11 para a direita em 1 bit
Como pode ser visto na Figura 7, todos os bits binários do número original são deslocados para a direita em 1 bit. O bit 1 mais baixo originalmente localizado à direita é deslocado e descartado e, em seguida, 0 é adicionado ao bit mais alto para compensar. O resultado final é 5, que é equivalente ao resultado da divisão do número original por 2.
operador de atribuição bit a bit composto
Todos os operadores bit a bit binários têm uma forma abreviada que combina atribuição com operações bit a bit. Os operadores de atribuição bit a bit compostos consistem em operadores de atribuição combinados com operadores lógicos bit a bit e de deslocamento. A Tabela 3 lista os operadores de atribuição de bits compostos combinados.
operador | significado | exemplo | resultado |
---|---|---|---|
&= | bit a bit e atribuição | num1 &= num2 | Equivalente a num 1=num 1 & num2 |
|= | bit a bit ou atribuição | num1 |= num2 | Equivalente a num 1=num 1 | num2 |
^= | atribuição XOR bit a bit | num1 ^= num2 | Equivalente a num 1=num 1 ^ num2 |
-= | atribuição inversa bit a bit | num1 -= num2 | Equivalente a num 1=num 1 - num2 |
«= | atribuição de deslocamento à esquerda bit a bit | num1 «= num2 | Equivalente a num 1=num 1 « num2 |
»= | atribuição de deslocamento à direita bit a bit | num1 »= num2 | Equivalente a num 1 = num 1 » num2 |
O programa a seguir define várias variáveis int e, em seguida, atribui o valor calculado à variável correspondente usando a forma abreviada de atribuição de bit:
int a = 1;int b = 2;int c = 3;a &= 4;a |= 4;a ^= c;a -= 6;b >>= 1;c <<= 1;System.out.println("a = " + a);System.out.println("b = " + b);System.out.println("c = " + c);
A saída deste programa é:
a = 1
b = 1
c = 6