operadores lógicos bit a bit

operadores lógicos bit a bit

Hay operadores lógicos de 4 bits: & (y), | (o), ~ (no) y ^ (o exclusivo). Excepto ~ (negación bit a bit), que es un operador unario, el resto son operadores binarios. La Tabla 1 enumera su uso básico.

operador significado ejemplo resultado
& Operación AND bit a bit (AND) 4 y 5 4
| Operación OR bit a bit (OR) 4 | 5 5
^ OR exclusivo bit a bit (XOR) 4 ^ 5 1
~ Operación de negación bit a bit (NOT) ~ 4 -5

operador AND bit a bit

El operador bit AND es &, y sus reglas de operación son: los números involucrados en la operación se alinean en el orden inferior y el orden superior se rellena con ceros. Si el bit binario correspondiente es 1 al mismo tiempo, el resultado del cálculo es 1, de lo contrario es 0. Por lo tanto, el resultado de AND bit a bit cualquier número con 0 es 0.

Por ejemplo la siguiente expresión:

100&0

La figura 1 muestra el proceso de operación y el resultado es 0.

imagen
Figura 1 El proceso de operación de 100 bits y 0

El siguiente es el proceso de realizar una operación AND bit a bit en dos números distintos de cero.

int x = 5,y = 12; // 创建整型变量保存两个数int z = x&y; // 对这两个数进行位与运算,结果保存到z

Después de ejecutar estas dos líneas de declaraciones, el valor de la variable Z es 4. La Figura 2 muestra el proceso de operación.

imagen
Figura 2 El proceso de operación de 5 bits y 12

operador OR bit a bit

El operador bit OR es |, y sus reglas de operación son: los números involucrados en la operación se alinean en el orden inferior, y el orden superior es insuficiente para llenar con ceros. Si solo uno de los bits binarios correspondientes es 1, entonces el resultado es 1; si todos los bits binarios correspondientes son 0, el resultado es 0.

A continuación se muestra una expresión que utiliza el operador OR bit a bit.

11|7

El resultado de la operación es 15, y la Figura 3 muestra su proceso de operación.

imagen
Figura 3 El proceso de operación de 11 o 7

Operador XOR bit a bit

El operador OR exclusivo de bits es ^, y sus reglas de operación son: los números involucrados en la operación se alinean en el orden inferior, y el orden superior es insuficiente para completar el cero. Si los bits binarios correspondientes son iguales (ambos 0 o 1 al mismo tiempo), el resultado es 0; si los bits correspondientes son diferentes, el resultado es 1.

A continuación se muestra una expresión que utiliza el operador XOR bit a bit.

11^7

El resultado de la operación es 12, y la Figura 4 muestra su proceso de operación.

imagen
Figura 4 El proceso de operación de XOR 7 de 11 bits

Sugerencia: en algunos lenguajes de alto nivel, el operador se usa ^como un operador de exponenciación y se debe prestar atención a la distinción.

operador de negación de bit

El operador de inversión de bits es ~, y su regla de operación es: solo se opera un operando, y el 1 en el binario del operando se cambia a 0, y el 0 se cambia a 1.

A continuación se muestra una expresión que utiliza el operador de negación bit a bit.

~10

El resultado de la operación es 65525 y la Figura 5 muestra su proceso de operación.

imagen
Figura 5 El proceso de operación de invertir 10 bits

Podemos utilizar el siguiente programa para comprobar el resultado de esta operación.

int i = 10;System.out.printf("%d \n",~i);

Compile y ejecute el programa anterior, y encontrará que la salida es -11 en lugar de 65525. Esto se debe a que el resultado después de la negación es un número hexadecimal y %d se usa en el programa anterior para convertir la salida a un número decimal.

Puede usar la siguiente declaración para ver los resultados hexadecimales.

int i=10;System.out.printf("%x \n",~i);

Puede ver que el resultado de salida es fff5, que es 1111111111110101 cuando se convierte a binario. El bit más alto de este número binario es 1, lo que indica que el número es negativo. Además del bit más alto, agregue 1 a la inversión bit a bit para obtener el código binario original 1000000000001011, que es -11 en decimal.

Nota: Los operandos de los operadores de bit solo pueden ser datos de caracteres o enteros y sus variantes, no para tipos de datos complejos como float, double o long.

operador de turno

Los operadores de desplazamiento se utilizan para mover un operando en una determinada dirección (izquierda o derecha) en un número específico de dígitos binarios. La Tabla 2 enumera dos operadores de desplazamiento en el lenguaje Java, los cuales son operadores binoculares.

Desplazar un bit a la derecha equivale a dividir por 2, desplazar n bits equivale a dividir por 2 n 2^n2n poder

operador significado ejemplo resultado
» operador de turno a la derecha 8»1 4
« operador de turno a la izquierda 9«2 36

operador de turno a la izquierda

El operador de desplazamiento a la izquierda es «, y su regla de operación es: desplazar todos los números a la izquierda por el número correspondiente de dígitos en forma binaria, eliminar el bit alto (descartar) y llenar la vacante en el bit bajo con cero.

Por ejemplo, el proceso de desplazar el entero 11 a la izquierda en 1 bit se muestra en la Figura 6.

imagen
Figura 6 Proceso de operación de desplazar 11 a la izquierda en 1 bit

Como puede verse en la Figura 6, todos los bits binarios del número original se desplazan 1 bit a la izquierda. El bit más alto 0 originalmente ubicado a la izquierda se desplaza y se descarta, y luego se agrega 0 al final para compensar el bit. El resultado final es 22, que equivale al doble del número original.

operador de turno a la derecha

El operador de desplazamiento a la derecha es », y su regla de funcionamiento es: mover todos los números a la derecha el número correspondiente de dígitos en forma binaria, eliminar los bits bajos (descartar) y rellenar los bits altos con ceros.

Por ejemplo, el proceso de desplazar el entero 11 a la derecha en 1 bit se muestra en la Figura 7.

imagen
Figura 7 Proceso de operación de desplazamiento de 11 a la derecha en 1 bit

Como se puede ver en la Figura 7, todos los bits binarios del número original se desplazan 1 bit a la derecha. El bit más bajo 1 originalmente ubicado a la derecha se desplaza y se descarta, y luego se agrega 0 al bit más alto para compensar. El resultado final es 5, que es equivalente al resultado de dividir el número original por 2.

operador de asignación bit a bit compuesto

Todos los operadores bit a bit binarios tienen una forma abreviada que combina asignación con operaciones bit a bit. Los operadores de asignación bit a bit compuestos consisten en operadores de asignación combinados con operadores lógicos y de desplazamiento bit a bit. La Tabla 3 enumera los operadores de asignación de bits compuestos combinados.

operador significado ejemplo resultado
&= bit a bit y asignación numero1 &= numero2 Equivalente a número 1 = número 1 y número 2
|= bit a bit o asignación numero1 |= numero2 Equivalente a número 1 = número 1 | número 2
^= asignación bit a bit XOR número1 ^= número2 Equivalente a num 1=num 1 ^ num2
-= asignación inversa bit a bit numero1 -= numero2 Equivalente a num 1=num 1 - num2
«= asignación de desplazamiento a la izquierda bit a bit num1 «= num2 Equivalente a num 1=num 1 « num2
»= asignación de desplazamiento a la derecha bit a bit num1 »= num2 Equivale a número 1 = número 1 » número 2

El siguiente programa define varias variables int y luego asigna el valor calculado a la variable correspondiente usando la forma abreviada de asignación de bits:

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);

La salida de este programa es:

a = 1
b = 1
c = 6

Supongo que te gusta

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