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