Saltar a contenido

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

unsigned int op1 = 0x41414141;
unsigned int result = ~op1; // result = 0xBEBEBEBE

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

unsigned int op1 = 0x41414141;
unsigned int op2 = 8;
unsigned int result = op1 << op2;

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

unsigned int op1 = 0x41414141;
unsigned int op2 = 8;
unsigned int result = op1 >> op2;

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.