Operadores de manejo de bits
En C++, los operadores de manejo de bits se utilizan para realizar operaciones a nivel de bits con valores enteros. Estos operadores permiten manipular los bits individuales de un número entero, lo que puede ser útil para tareas como la codificación y decodificación de datos, el establecimiento de banderas de bits y el enmascaramiento de bits.
Tipos de operadores de manejo de bits:
Operadores bit a bit:
- Y bit a bit (
&): Realiza la operación AND bit a bit entre dos operandos. El resultado es un valor entero con el mismo número de bits que los operandos originales. Cada bit del resultado se establece en 1 solo si el bit correspondiente en ambos operandos está establecido en 1. - O bit a bit (
|): Realiza la operación OR bit a bit entre dos operandos. El resultado es un valor entero con el mismo número de bits que los operandos originales. Cada bit del resultado se establece en 1 si al menos uno de los bits correspondientes en los operandos está establecido en 1. - XOR bit a bit (
^): Realiza la operación XOR bit a bit entre dos operandos. El resultado es un valor entero con el mismo número de bits que los operandos originales. Cada bit del resultado se establece en 1 si los bits correspondientes en los operandos son diferentes. - NO bit a bit (
~): Realiza la operación NOT bit a bit sobre un operando. El resultado es un valor entero con el mismo número de bits que el operando original. Cada bit del resultado se invierte (es decir, si es 1 se convierte en 0 y viceversa).
- Y bit a bit (
Operadores de desplazamiento de bits:
- Desplazamiento a la izquierda (
<<): Desplaza los bits del operando de la izquierda hacia la izquierda el número de bits especificado por el segundo operando. Los bits desplazados fuera del extremo izquierdo se pierden, y los bits desplazados se rellenan con ceros a la derecha. - Desplazamiento a la derecha (
>>): Desplaza los bits del operando de la izquierda hacia la derecha el número de bits especificado por el segundo operando. Los bits desplazados fuera del extremo derecho se pierden, y los bits desplazados se rellenan con ceros a la izquierda para números enteros sin signo o con el bit de signo extendido a la derecha para números enteros con signo.
- Desplazamiento a la izquierda (
Operadores de asignación de bits:
- Asignación AND bit a bit (
&=): Realiza la operación AND bit a bit entre el operando de la izquierda y el operando de la derecha, y luego almacena el resultado en el operando de la izquierda. - Asignación OR bit a bit (
|=): Realiza la operación OR bit a bit entre el operando de la izquierda y el operando de la derecha, y luego almacena el resultado en el operando de la izquierda. - Asignación XOR bit a bit (
^=): Realiza la operación XOR bit a bit entre el operando de la izquierda y el operando de la derecha, y luego almacena el resultado en el operando de la izquierda. - Asignación de desplazamiento a la izquierda (
<<=): Desplaza los bits del operando de la izquierda hacia la izquierda el número de bits especificado por el operando de la derecha, y luego almacena el resultado en el operando de la izquierda. - Asignación de desplazamiento a la derecha (
>>=): Desplaza los bits del operando de la izquierda hacia la derecha el número de bits especificado por el operando de la derecha, y luego almacena el resultado en el operando de la izquierda.
- Asignación AND bit a bit (
Ejemplo de uso:
C++
// Ejemplo de AND bit a bit
int a = 10; // 0b1010
int b = 6; // 0b0110
int resultado = a & b; // 0b0010
// Ejemplo de OR bit a bit
int a = 10; // 0b1010
int b = 6; // 0b0110
int resultado = a | b; // 0b1110
// Ejemplo de XOR bit a bit
int a = 10; // 0b1010
int b = 6; // 0b0110
int resultado = a ^ b; // 0b1000
// Ejemplo de desplazamiento a la izquierda
// Este operador equivale a multiplicar el valor por 2 elevado al numero de
// desplazamientos, en el ejemplo 10 * (2 ^ 2) = 40
int a = 10; // 0b1010
int resultado = a << 2; // 0b101000 = 40int numero = 42; // Representación binaria: 0b00101010
// Desplazando 2 bits a la derecha
int resultado = numero >> 2;
// Representación binaria de 'resultado': 0b00001010
// Explicación:
- Los bits de 'numero' se desplazan 2 posiciones a la derecha.
- Los dos bits más a la derecha se pierden (0b10).
- Los dos bits desplazados se rellenan con ceros (00).
- El resultado final es 0b00001010, que representa el número decimal 10.
Uso del operador de desplazamiento a la derecha:
- Dividir por potencias de 2: El desplazamiento a la derecha puede usarse como una forma rápida y eficiente de dividir un número entero por una potencia de 2. Por ejemplo, desplazar un número a la derecha 3 posiciones es equivalente a dividirlo por 8.
- Extraer bits específicos: El desplazamiento a la derecha puede usarse para extraer bits específicos de un número entero. Por ejemplo, desplazar un número a la derecha 4 posiciones y luego realizar una operación AND bit a bit con 15 (0b00001111) aislará los 4 bits menos significativos del número original.
- Máscaras de bits: El desplazamiento a la derecha puede usarse en conjunto con máscaras de bits para realizar operaciones específicas en conjuntos de bits. Por ejemplo, desplazar un número a la derecha 1 posición y luego realizar una operación XOR bit a bit con 1 (0b00000001) invertirá el bit menos significativo del número original.
Ejemplo adicional:
C++
// Ejemplo de desplazamiento a la derecha con números enteros con signo
int numeroConSigno = -42; // Representación binaria: 11110110 (con complemento a 2)
// Desplazando 2 bits a la derecha
int resultadoConSigno = numeroConSigno >> 2;
// Representación binaria de 'resultadoConSigno': 11111010
// Explicación:
- Los bits de 'numeroConSigno' se desplazan 2 posiciones a la derecha.
- Los dos bits más a la derecha se pierden (11).
- Los dos bits desplazados se rellenan con el bit de signo extendido (11).
- El resultado final es 11111010, que representa el número decimal -21.
Comentarios
Publicar un comentario