Operadores bit a bit en C: ejercicio resuelto

Operadores bit a bit en C: ejercicio resuelto

Si buscas operadores bit a bit en C ejercicio resuelto, aquí tienes los seis operadores binarios de C aplicados sobre valores concretos para que veas exactamente qué bit se activa o apaga en cada operación.

Los operadores bitwise operan sobre la representación binaria de los enteros y son fundamentales en sistemas embebidos, protocolos de red, flags de configuración y manipulación de registros hardware.

Enunciado

Dados a = 12 (binario 1100) y b = 10 (binario 1010), calcula e imprime el resultado de &, |, ^, ~a, a << 1 y a >> 1 mostrando también la representación hexadecimal donde sea relevante.

Solución en C

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#include <stdio.h>

int main(void) {
    unsigned int a = 12u; /* 1100 en binario */
    unsigned int b = 10u; /* 1010 en binario */

    printf("a       = %2u  (0x%X)\n", a, a);
    printf("b       = %2u  (0x%X)\n", b, b);
    printf("a & b   = %2u  (0x%X)  AND bit a bit\n",  a & b,  a & b);
    printf("a | b   = %2u  (0x%X)  OR  bit a bit\n",  a | b,  a | b);
    printf("a ^ b   = %2u  (0x%X)  XOR bit a bit\n",  a ^ b,  a ^ b);
    printf("~a      = %u   NOT bit a bit\n", ~a);
    printf("a << 1  = %2u  desplazamiento izquierda\n", a << 1);
    printf("a >> 1  = %2u  desplazamiento derecha\n",  a >> 1);
    return 0;
}

Resultado esperado

1
2
3
4
5
6
7
8
a       = 12  (0xC)
b       = 10  (0xA)
a & b   =  8  (0x8)  AND bit a bit
a | b   = 14  (0xE)  OR  bit a bit
a ^ b   =  6  (0x6)  XOR bit a bit
~a      = 4294967283   NOT bit a bit
a << 1  = 24  desplazamiento izquierda
a >> 1  =  6  desplazamiento derecha

Errores frecuentes

  • Confundir & (AND bit a bit) con && (AND lógico): son operadores distintos.
  • Aplicar ~ sobre int con signo y obtener resultados negativos inesperados; usa unsigned para manipulaciones bit a bit.
  • Desplazar más bits de los que tiene el tipo (a << 32 sobre un unsigned int de 32 bits es comportamiento indefinido).
  • No usar paréntesis alrededor de expresiones bit a bit en expresiones complejas: la precedencia de &, | y ^ es menor que la de comparaciones.

Aplicación práctica

Los operadores bit a bit se usan para activar, desactivar o comprobar flags individuales en un campo de bits, enmascarar partes de un byte en protocolos de red y dividir o multiplicar por potencias de dos de forma eficiente con desplazamientos.

Siguiente ejercicio recomendado

Práctica guiada y libro completo

Si quieres una ruta completa con progresión real de dificultad:

FAQ

¿Cuál es la diferencia entre & y && en C?

& es el operador AND bit a bit: compara cada bit de los dos operandos. && es el operador AND lógico: evalúa si ambos operandos son distintos de cero y devuelve 0 o 1. Son completamente diferentes.

¿Por qué ~12 da 4294967283 y no -13?

~a invierte todos los bits. En un unsigned int de 32 bits, ~12 es 0xFFFFFFF3 = 4294967283. Si usas int con signo el resultado es -13 (complemento a dos), que es lo mismo a nivel de bits pero se interpreta diferente.

¿Cuándo usar desplazamiento en lugar de multiplicar o dividir?

x << 1 es equivalente a x * 2 y x >> 1 a x / 2 (para enteros sin signo no negativos). Los compiladores modernos optimizan esto automáticamente, así que úsalos cuando el código refleje manipulación de bits real, no como truco de velocidad.