Saltar al contenido principal
riqo.ioHerramientas para grandes ideas

Bit, byte, nibble, enteros fixed-width y complemento a dos

Cómo los ordenadores representan bits e enteros signed y por qué anchura e interpretación cambian el valor observado.

Concepto y contexto

Un bit representa dos estados, un nibble agrupa cuatro bits y un byte moderno contiene ocho.

Estas unidades describen capacidad de representación, mientras el significado de un patrón depende del tipo: entero unsigned, signed, carácter, floating point u otro.

Un buen modelo mental separa el concepto abstracto de su representación concreta y del entorno donde se utiliza. Esa separación evita trasladar automáticamente supuestos válidos en un protocolo, biblioteca o formato hacia sistemas que pueden aplicar reglas o garantías diferentes.

Fundamentos y terminología

Un entero fixed-width usa un número predeterminado de bits y por tanto tiene un rango finito.

Con n bits unsigned se representan valores de 0 a 2^n-1; con complemento a dos signed el rango típico va de -2^(n-1) a 2^(n-1)-1.

La terminología debe leerse junto con el estándar, versión o contrato que la define, porque palabras parecidas pueden describir propiedades distintas según la capa. Explicitar esas definiciones mejora interoperabilidad, documentación y capacidad para diagnosticar comportamientos inesperados.

Cómo funciona

El complemento a dos representa negativos de forma que suma y resta puedan reutilizar aritmética binaria modular.

El bit más significativo aporta un peso negativo y el overflow descarta bits más allá de la anchura según las reglas del tipo.

En sistemas reales conviene seguir el recorrido de los datos entre capas e identificar qué transformaciones son reversibles, cuáles introducen restricciones y dónde puede perderse información. Así resulta más sencillo razonar sobre responsabilidades entre productores, consumidores, almacenamiento y transporte.

Ejemplo razonado

El byte 11111111 vale 255 como entero unsigned de 8 bits pero -1 como signed de 8 bits en complemento a dos.

El patrón de bits no contiene por sí mismo la signedness; el contexto del tipo determina qué valor matemático se interpreta.

Un ejemplo razonado es reutilizable cuando muestra sus precondiciones e invariantes y no solo el resultado final. Cambiar un supuesto cada vez permite distinguir el comportamiento garantizado por un estándar de las decisiones particulares de una aplicación o implementación.

Errores y conceptos equivocados

Cambiar de base numérica no cambia un valor, pero interpretar un patrón hexadecimal como signed de anchura concreta puede mostrar un número negativo.

Confundir shifts lógicos y aritméticos o ignorar overflow y extensión de signo genera errores low-level.

Muchos fallos nacen de supuestos implícitos entre sistemas aparentemente compatibles que usan versiones, reglas de canonicalización o modelos de tipos diferentes. En interoperabilidad y seguridad conviene especificar y probar entradas anómalas en lugar de tratarlas como casos irrelevantes.

Buenas prácticas y criterios de elección

Especifica anchura, signedness y endianness cuando una representación binaria cruza fronteras.

Usa tipos suficientemente amplios, valida overflow y separa conversión de notación de reinterpretación del mismo patrón de bits.

Una práctica robusta combina estándares documentados, bibliotecas maduras, contratos explícitos y pruebas con casos límite representativos. La mejor elección no es siempre la más breve o popular: también cuentan portabilidad, legibilidad, rendimiento, seguridad, evolución y coste operativo.

Guías relacionadas

Sistemas numéricos: binario, octal, decimal y hexadecimal

Bases posicionales, conversiones, representación informática y diferencia entre valor matemático e interpretación de bits.

Escaping vs sanitization: contextos HTML y prevención de XSS

Por qué escaping contextual y sanitization resuelven problemas distintos y cómo impedir que entradas no confiables se conviertan en markup activo.