Apuntes sobre Operadores Bit a Bit en C¶
Introducción a los Operadores Bit a Bit¶
Los operadores bit a bit en C permiten manipular los patrones de bits de los valores enteros a nivel binario, en contraste con los operadores aritméticos que operan sobre números completos. Estos operadores son esenciales en programación de bajo nivel, como en la explotación de binarios, donde es crucial entender la representación binaria de los enteros.
Ejemplo de Representación¶
| Formato | Valor Impreso |
|---|---|
| HEX | 0x41414141 |
| DECIMAL | 1094795585 |
| BINARY | 0100 0001 0100 0001 0100 0001 0100 0001 |
Operador OR Bit a Bit¶
El operador OR bit a bit (|) combina los bits de dos operandos, estableciendo un 1 en el resultado si al menos uno de los bits correspondientes en los operandos es 1.
Ejemplo¶
unsigned int op1 = 0x41414141;
unsigned int op2 = 0x42424242;
unsigned int result = op1 | op2; // result = 0x43434343
Representación Binaria¶
| Nombre | Hex | Binario |
|---|---|---|
| op1 | 0x41414141 | 0100 0001 0100 0001 0100 0001 0100 0001 |
| op2 | 0x42424242 | 0100 0010 0100 0010 0100 0010 0100 0010 |
| result | 0x43434343 | 0100 0011 0100 0011 0100 0011 0100 0011 |
Operador AND Bit a Bit¶
El operador AND bit a bit (&) preserva solo los bits 1 que están presentes en ambos operandos.
Ejemplo¶
unsigned int op1 = 0x41414141;
unsigned int op2 = 0x42424242;
unsigned int result = op1 & op2; // result = 0x40404040
Representación Binaria¶
| Nombre | Hex | Binario |
|---|---|---|
| op1 | 0x41414141 | 0100 0001 0100 0001 0100 0001 0100 0001 |
| op2 | 0x42424242 | 0100 0010 0100 0010 0100 0010 0100 0010 |
| result | 0x40404040 | 0100 0000 0100 0000 0100 0000 0100 0000 |
Uso común: Este operador se utiliza frecuentemente para enmascarar bits, eliminando bits no deseados.
Operador XOR Bit a Bit¶
El operador XOR bit a bit (^) establece un bit 1 en el resultado solo si exactamente uno de los bits correspondientes en los operandos es 1. Es común en funciones criptográficas.
Ejemplo¶
unsigned int op1 = 0x41414141;
unsigned int op2 = 0x42424242;
unsigned int result = op1 ^ op2; // result = 0x03030303
Representación Binaria¶
| Nombre | Hex | Binario |
|---|---|---|
| op1 | 0x41414141 | 0100 0001 0100 0001 0100 0001 0100 0001 |
| op2 | 0x42424242 | 0100 0010 0100 0010 0100 0010 0100 0010 |
| result | 0x03030303 | 0000 0011 0000 0011 0000 0011 0000 0011 |
Operador NOT Bit a Bit¶
El operador NOT bit a bit (~) invierte todos los bits de un operando, convirtiendo los 1 en 0 y viceversa.
Ejemplo¶
Representación Binaria¶
| Nombre | Hex | Binario |
|---|---|---|
| op1 | 0x41414141 | 0100 0001 0100 0001 0100 0001 0100 0001 |
| result | 0xBEBEBEBE | 1011 1110 1011 1110 1011 1110 1011 1110 |
Desplazamiento a la Izquierda (Shift Left)¶
El operador de desplazamiento a la izquierda (<<) mueve los bits de un entero hacia la izquierda, rellenando con ceros los bits vacíos a la derecha.
Ejemplo¶
Ejemplo Visual (con 0x0000FFFF)¶
| Nombre | Hex | Binario |
|---|---|---|
| op1 | 0x0000FFFF | 0000 0000 0000 0000 1111 1111 1111 1111 |
| op2 | 0x00000008 | 0000 0000 0000 0000 0000 0000 0000 1000 |
| result | 0x00FFFF00 | 0000 0000 1111 1111 1111 1111 0000 0000 |
Desplazamiento a la Derecha (Shift Right)¶
El operador de desplazamiento a la derecha (>>) mueve los bits de un entero hacia la derecha, rellenando los bits vacíos a la izquierda (con ceros para enteros sin signo).
Ejemplo¶
Ejemplo Visual (con 0xFFFF0000)¶
| Nombre | Hex | Binario |
|---|---|---|
| op1 | 0xFFFF0000 | 1111 1111 1111 1111 0000 0000 0000 0000 |
| op2 | 0x00000008 | 0000 0000 0000 0000 0000 0000 0000 1000 |
| result | 0x00FFFF00 | 0000 0000 1111 1111 1111 1111 0000 0000 |
Conclusión¶
Los operadores bit a bit (|, &, ^, ~, <<, >>) son herramientas poderosas para manipular los bits de los enteros en C. Su comprensión es crucial en entornos de bajo nivel, como la explotación de binarios, donde el control preciso de los bits puede ser necesario para tareas como enmascaramiento, cifrado o manipulación de datos a nivel binario.