Representación de datos
Los bits por sí mismos son simplemente estados binarios (0 y 1). Para que el hardware y el software puedan operar con ellos, necesitamos definir tipos de datos y formatos de codificación.
Una misma secuencia de 8 bits en memoria, como 01000001₂, puede interpretarse como el número entero 65, el carácter de texto 'A', una instrucción de procesador o un componente de color RGB, dependiendo del contexto.
1. Números Enteros sin Signo (Unsigned Integers) #
Cuando solo necesitamos representar cantidades positivas y el cero, todos los bits disponibles se utilizan para codificar la magnitud numérica:
| Tipo / Bits | Número de combinaciones () | Rango de valores representables |
|---|---|---|
| 8 bits (Byte / uint8) | ||
| 16 bits (Short / uint16) | ||
| 32 bits (Int / uint32) | ||
| 64 bits (Long / uint64) |
2. Números Enteros con Signo: El Complemento a Dos (C2) #
Para representar números negativos en binario, los ordenadores modernos utilizan universalmente el sistema de Complemento a Dos (Two's Complement):
- Para 8 bits con signo: .
- Bit más significativo (MSB): Si el primer bit por la izquierda es
0, el número es positivo; si es1, el número es negativo.
1 01111111₂ = +127 (Máximo positivo en 8 bits) 2 00000001₂ = +1 3 00000000₂ = 0 (Existe un ÚNICO cero) 4 11111111₂ = -1 (Todos los bits a 1 representan -1) 5 10000000₂ = -128 (Mínimo negativo en 8 bits)
Algoritmo para Calcular el Complemento a Dos de un Número: #
Para transformar un número positivo en su equivalente negativo (ej. de a en 8 bits):
- Escribir el número positivo en binario:
- Invertir todos los bits (Complemento a Uno / NOT):
- Sumar al resultado:
Desbordamiento Aritmético (Arithmetic Overflow) #
Ocurre cuando el resultado de una operación matemática excede el rango máximo que pueden almacenar los bits disponibles. Por ejemplo, en enteros de 8 bits con signo: (el bit de acarreo invade el bit de signo).
Antes de interpretar los bits como texto, experimenta con su interpretación como enteros con signo:
Laboratorio interactivo
Bits con signo y desbordamiento
Pulsa los bits para cambiar su interpretación. El primer bit tiene peso negativo en complemento a dos.
Rango: -128 a 127
Con signo
-5
Sin signo
251
- 1. Magnitud 5 en binario sin signo:
00000101 - 2. Invierte los bits:
11111010 - 3. Suma 1:
11111011→ -5
Experimenta: Pulsa «Máximo + 1». ¿Por qué aparece el mínimo negativo? Cambia de 8 a 4 bits y compara sus rangos.
3. Codificación de Texto: ASCII, Unicode y UTF-8 #
1┌─────────────────────────────────────────────────────────────────────────────┐ 2│ EVOLUCIÓN DE LA CODIFICACIÓN │ 3├─────────────────┬───────────────────────────────────────────────────────────┤ 4│ ASCII (7 bits) │ 128 caracteres del alfabeto inglés (A-Z, a-z, 0-9, signos)│ 5├─────────────────┼───────────────────────────────────────────────────────────┤ 6│ ISO-8859-1 (8b) │ 256 caracteres (Añade caracteres latinos: á, é, í, ñ, ¿) │ 7├─────────────────┼───────────────────────────────────────────────────────────┤ 8│ UNICODE │ Asigna un "Code Point" numérico universal a cada símbolo │ 9│ │ (ej. 'A' ──► U+0041, 'ñ' ──► U+00F1, '😀' ──► U+1F600) │ 10├─────────────────┼───────────────────────────────────────────────────────────┤ 11│ UTF-8 │ Formato de longitud variable (1 a 4 bytes) para Unicode. │ 12│ │ 100% compatible con ASCII y el estándar de la Web. │ 13└─────────────────┴───────────────────────────────────────────────────────────┘

Fuente: upload.wikimedia.orgLicencia: Licencia no indicada
AmpliarEstructura de Bytes en UTF-8: #
- 1 Byte (
0xxxxxxx): Caracteres ASCII estándar (). Ocupan exactamente 1 byte ('A'=01000001). - 2 Bytes (
110xxxxx 10xxxxxx): Caracteres latinos extendidos, griegos, árabes ('á','ñ'). - 3 Bytes (
1110xxxx 10xxxxxx 10xxxxxx): Caracteres asiáticos (chino, japonés, coreano), símbolos matemáticos. - 4 Bytes (
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx): Emojis (😀), caracteres históricos raros.
Explora primero cómo un mismo texto se convierte en puntos de código y bytes:
Laboratorio interactivo
Del texto a los bytes UTF-8
Selecciona un punto de código para inspeccionar su codificación. Un símbolo visible puede estar formado por varios puntos de código.
3 puntos de código
4 unidades UTF-16 (JS length)
7 bytes UTF-8
UTF-8 del punto seleccionado
Byte 1 · 0x41
01000001
Violeta: prefijo de formato. Azul: bits de datos. Los bytes de continuación empiezan por 10.
Experimenta: Compara «é» con «e + acento». Se ven parecidos, pero ¿contienen los mismos puntos de código y bytes?
4. Números Reales en Coma Flotante: Estándar IEEE 754 #
Para representar números decimales extremadamente grandes o muy pequeños (, , ), los ordenadores utilizan el formato de Coma Flotante (Floating Point) definido por el estándar IEEE 754.
1ESTRUCTURA DE UN FLOAT DE 32 BITS (PRECISIÓN SIMPLE): 2┌──────┬────────────────────────┬─────────────────────────────────────────────┐ 3│ Signo│ Exponente con Sesgo │ Mantisa / Fracción │ 4│ 1 bit│ 8 bits │ 23 bits │ 5└──────┴────────────────────────┴─────────────────────────────────────────────┘
- Signo ():
0para positivo,1para negativo. - Exponente (): Potencia de 2 escalada con un sesgo (bias).
- Mantisa (): Los dígitos significativos del número normalizado en base 2 ().
¿Por qué en programación? #
En el sistema decimal, la fracción es infinita periódica.
En el sistema binario, fracciones decimales exactas como () o () se convierten en números binarios periódicos infinitos:
Al truncar esta secuencia infinita en los 52 bits de la mantisa de un double de 64 bits, se genera un minúsculo error de redondeo acumulado.
CAUTION
Regla Crítica en Desarrollo de Software:
NUNCA utilices variables de coma flotante (floatodouble) para calcular dinero, transacciones bancarias, saldos o criptomonedas. Utiliza enteros (guardando céntimos) o tipos exactos de coma fija comoBigDecimal(Java) oDecimal(Python/C#).
Compara números representables exactamente con números que necesitan redondeo y observa sus bits:
Laboratorio interactivo
Dentro de un número en coma flotante
Inspecciona un float de 32 bits: 1 bit de signo, 8 de exponente y 23 de fracción. Compara el valor de entrada con el valor almacenado.
Signo · 1 bit
0
Exponente · 8 bits
01111011
Fracción · 23 bits
10011001100110011001101
Clasificación: Normal.
Valor almacenado: 0.10000000149011612
Diferencia respecto a la entrada convertida a Number: 1.4901161138336505e-9
(−1)^0 × 1.600000023841858 × 2^-4
Exponente real = 123 − 127 = -4. La fracción tiene un 1 inicial implícito.
JavaScript calcula con Number de 64 bits. Aquí redondeamos a 32 bits para inspeccionar el formato; la entrada ya ha pasado por la conversión a Number.
Experimenta: Compara 0.5 y 0.1. Después prueba 16777217: ¿qué entero termina almacenándose en 32 bits?
Resumen del tema
Conceptos clave #
- Enteros sin Signo: rango .
- Complemento a Dos (C2): estándar universal para enteros con signo en rango . Permite sumar números positivos y negativos con los mismos circuitos de la ALU.
- Unicode y UTF-8: asignación de puntos de código universales con codificación de longitud variable (1 a 4 bytes) retrocompatible con ASCII.
- Coma Flotante IEEE 754: representación científica (Signo, Exponente, Mantisa); introduce errores de precisión inherentes al convertir fracciones decimales a binario.
Qué debes recordar #
El tipo de dato le indica a la CPU cómo debe decodificar una secuencia de bits binarios en memoria física para transformarla en enteros, texto o números reales.