¿Qué son los operadores bit a bit?

En un programa de computadora, los operadores bit a bit son operadores para manipular patrones de bits en expresiones. AND, OR, OR exclusivo (XOR), NOT, desplazamiento a la derecha y desplazamiento a la izquierda son operaciones comunes. La mayoría de los lenguajes de programación de computadoras incluyen los seis operadores. A menudo se utilizan para configurar, borrar o voltear bits individuales en programas que controlan el hardware de la computadora. Los operadores bit a bit también se utilizan con frecuencia en algoritmos de compresión y cifrado de datos.

Los operadores habituales a nivel de bits suelen estar representados simbólicamente en lenguajes de programación como C, C ++ y Java. Se usan en expresiones tal como lo serían los operadores aritméticos como los signos más o menos. El operador bit a bit AND se representa con el ampersand &, OR con la barra vertical | y XOR con el símbolo de intercalación ^. NOT, también conocido como operador de complemento, se indica con una tilde ~.

El operador de cambio de la derecha utiliza un símbolo de intercalación doble que apunta a la derecha >>. Por el contrario, el desplazamiento a la izquierda se indica mediante un símbolo de intercalación doble que apunta a la izquierda. Java incluye otra operación de desplazamiento a la derecha, que se muestra con un símbolo de intercalación triple que apunta a la derecha >>>.

Los operadores bit a bit aplican una operación lógica a cada par de bits en sus operandos. NO, el desplazamiento a la derecha y el desplazamiento a la izquierda tienen solo un operando verdadero; el segundo valor en las operaciones de desplazamiento es el recuento de bits. Para comprender mejor cómo funcionan los operadores bit a bit, una persona puede visualizar sus operandos como números binarios. Por ejemplo, el operador de complemento cambia cada bit de su operando único al estado opuesto. Un uno se convierte en cero y un cero en uno. El complemento del valor binario de 8 bits 00110101 es 11001010.

El operador AND tiene dos operandos. Bit a bit, se realiza una operación AND lógica utilizando un bit correspondiente de cada operando. El resultado de cada operación de bit se coloca en esa posición de bit del resultado general. Por ejemplo, el operador AND procesará el bit 7 de un operando con el bit 7 del otro operando. El resultado se almacenará en el bit 7 del resultado general.

En una operación AND, ambos bits de operando deben ser unos para que el resultado sea uno; de lo contrario, el resultado es cero. Por ejemplo, si los valores binarios de 8 bits de los operandos son 00110101 y 11110000, el resultado será 00110000. Un uso común del operador AND es poner a cero bits particulares en el resultado. Esto se hace colocando ceros en esas posiciones de bit en uno de los operandos.
En una operación OR, ambos bits de operando deben ser ceros para que el resultado sea cero; de lo contrario, el resultado es uno. Un uso común del operador OR es establecer ciertos bits del resultado en unos. Esto se hace colocando unos en esas posiciones de bit en uno de los operandos. Para la operación XOR, el resultado es cero si ambos bits de operando son cero o si ambos bits de operando son uno; de lo contrario, el resultado es uno.
El desplazamiento a la izquierda y el desplazamiento a la derecha mueven los bits del operando hacia la izquierda o hacia la derecha el número especificado de posiciones de bits. Un desplazamiento lógico a la derecha mueve un cero al bit más a la izquierda como parte del desplazamiento. Un desplazamiento aritmético a la derecha copia el bit más a la izquierda, el bit de signo, antes del desplazamiento a la misma posición después del desplazamiento. El bit original también se desplaza a la derecha junto con el resto. Cualquiera de los tipos de desplazamiento a la izquierda mueve un cero al bit más a la derecha.
Cuando un operando se desplaza a la derecha, el bit más a la derecha antes del desplazamiento simplemente se descarta. De manera similar, se elimina el bit más a la izquierda antes de un desplazamiento a la izquierda. No se envuelve al otro extremo del operando.
Las operaciones de desplazamiento bit a bit dependen del idioma y de la implementación. Por ejemplo, en C y C ++, >> y realiza cambios lógicos si el operando es un entero sin signo. Si el operando es un entero con signo, es probable que en su lugar se realice un desplazamiento aritmético. En Java, todos los operandos se consideran con signo y los cambios aritméticos siempre se realizan con >> y. El operador >>> se usa para un desplazamiento lógico a la derecha, pero aún es posible realizar accidentalmente un desplazamiento aritmético a la derecha en su lugar sin un encasillado cuidadoso.
También pueden surgir complicaciones cuando los operandos tienen diferentes longitudes de bits o cuando algunos están firmados y otros no. Es posible que los operadores bit a bit y las constantes numéricas en medio de una expresión compleja no se evalúen como se esperaba. Se debe tener cuidado de especificar el tamaño y la naturaleza firmada / no firmada de cada cantidad en la expresión. Esto se puede hacer con un encasillado cuidadoso o asignaciones provisionales a tipos de variables específicos en el código del programa.