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.
101111111₂ = +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: 11111010 \\ +\quad 00000001 \\ \hline \mathbf{11111011} & (= -5_{10}) \end{array}$$
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).
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└─────────────────┴───────────────────────────────────────────────────────────┘
Estructura 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.
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#).
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.