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
Resultado esperado
Errores frecuentes
- Confundir
&(AND bit a bit) con&&(AND lógico): son operadores distintos. - Aplicar
~sobreintcon signo y obtener resultados negativos inesperados; usaunsignedpara manipulaciones bit a bit. - Desplazar más bits de los que tiene el tipo (
a << 32sobre ununsigned intde 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
- Tipos de datos en C: ejercicio resuelto
- sizeof en C: ejercicio resuelto
- Operadores relacionales y lógicos en C
- Todos los ejercicios de C
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.