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.

img
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.

img
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.

img
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.

img
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.

img
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.

img
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.

img
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

Acho que você gosta

Origin blog.csdn.net/qq_41704415/article/details/126401013
Recomendado
Clasificación