En muchos motores de videojuegos (Unity, Godot) las capas de colisión se configuran como máscaras de bits: cada capa es un bit dentro de un entero, y decidir si dos objetos pueden colisionar se reduce a una sola operación AND entre sus máscaras. Es un ejemplo perfecto de por qué las operaciones bit a bit importan mucho más allá de la teoría.
AND, OR, XOR, NOT — las cuatro operaciones básicas
- AND (&) — el bit resultante es 1 solo si ambos bits de entrada son 1. Sirve para comprobar si una capa concreta está activa dentro de una máscara.
- OR (|) — el bit resultante es 1 si al menos uno de los bits de entrada es 1. Sirve para combinar varias capas o indicadores en un solo valor.
- XOR (^) — el bit resultante es 1 si los bits de entrada son distintos; aplicar XOR dos veces con el mismo valor devuelve el original.
- NOT (~) — invierte cada bit de un número.
En qué se diferencia el AND bit a bit del lógico
El AND lógico (&& en la mayoría de los lenguajes) trabaja con valores booleanos completos y da true/false, mientras que el AND bit a bit (&) procesa cada bit de dos números por separado y devuelve un número. Confundir los dos es una causa común de errores, sobre todo porque algunos lenguajes permiten ambos sin lanzar ningún error de tipos.
Por qué esta herramienta va de la mano con el conversor de bases
Una máscara de capas con valor decimal 42 no dice nada a simple vista, pero la misma máscara como 0b101010 muestra de inmediato qué capas concretas están activas. Por eso las operaciones bit a bit casi nunca se razonan en decimal, sino en binario o hexadecimal — el conversor de bases suele ser el primer paso antes de que AND/OR/XOR tengan sentido visual.
Para qué se necesita esto
- Almacenar y comprobar de forma eficiente un conjunto de indicadores booleanos en un solo número.
- Entender código de bajo nivel que trabaja con protocolos de red o formatos binarios.
- Optimizar cálculos donde las operaciones bit a bit son más rápidas que la aritmética normal.
La trampa de la precedencia de operadores
En la mayoría de los lenguajes de programación, los operadores bit a bit & y | tienen menor precedencia que los operadores de comparación — por eso una expresión como if (a & b == c) en realidad se evalúa como a & (b == c), no como el autor esperaba. Esta es una de las causas más comunes de errores difíciles de detectar al trabajar con máscaras de bits, y la forma fiable de evitarlo es poner siempre paréntesis explícitos alrededor de las operaciones bit a bit.