Tema 1. Representación y comunicación de la información
Índice
- Introducción
- El concepto de información y su representación digital
- Sistemas de numeración y conversiones
- Representación de números enteros
- Representación de números reales: coma flotante IEEE 754
- Representación decimal codificada en binario (BCD)
- Representación de la información alfanumérica: códigos de caracteres
- Códigos detectores y correctores de error
- Magnitudes de información y unidades de medida
- Fundamentos de teoría de la información
- Comunicación y transmisión de datos
- Compresión de la información
- Aplicación didáctica y relación con el currículo
- Conclusión
- Bibliografía y referencias
1. Introducción
Toda la informática descansa sobre una idea aparentemente simple pero de enorme alcance: cualquier información que un ser humano sea capaz de concebir —un número, una letra, una imagen, un sonido, una orden de programa— puede reducirse a una secuencia de símbolos discretos y, en última instancia, a combinaciones de dos estados físicos distinguibles. Esa reducción es lo que llamamos representación digital de la información, y constituye el cimiento sobre el que se edifican todos los demás temas del temario: sin una representación rigurosa no hay aritmética en el procesador, no hay almacenamiento, no hay redes ni multimedia.
La elección del sistema binario no es arbitraria ni meramente histórica. Un dispositivo electrónico distingue con muchísima mayor fiabilidad la presencia o ausencia de tensión (dos estados) que diez niveles de tensión distintos. La inmunidad al ruido, la regeneración perfecta de la señal y la sencillez del álgebra de Boole asociada hacen del bit la unidad natural de la información en los computadores. A partir de él, todo es cuestión de codificación: establecer convenios que asocien biunívocamente las entidades del mundo (números, caracteres, muestras de señal) con secuencias de bits. Un ejemplo cotidiano ilustra la ventaja: si un margen de decisión separa el 0 del 1 con holgura de varios voltios, una interferencia que degrade la señal en unas décimas no altera el bit leído, y el receptor puede regenerar el pulso original limpio; con diez niveles, esa misma interferencia produciría lecturas erróneas. La informática digital es, en el fondo, el arte de operar dentro de esos márgenes de seguridad.
Este tema aborda esa tarea de codificación en sus dos grandes vertientes. La primera es la representación: cómo expresar números enteros y reales, caracteres y símbolos mediante bits, garantizando que las operaciones aritméticas y lógicas sean correctas y eficientes. La segunda es la comunicación: cómo transmitir esas secuencias de bits de un punto a otro, qué leyes teóricas (Shannon) gobiernan la capacidad de un canal, cómo protegerse de los errores que la transmisión y el almacenamiento introducen, y cómo comprimir la información para ocupar menos espacio o ancho de banda. Ambas vertientes comparten un mismo aparato conceptual —la teoría de la información— que cierra el tema y le da unidad.
El desarrollo que sigue combina el rigor matemático imprescindible (sistemas de numeración, complemento a dos, estándar IEEE 754, códigos de Hamming, entropía de Shannon) con la perspectiva del estándar industrial vigente en 2026 (Unicode 16, UTF-8, CRC-32, códecs AV1 y H.266, compresores Zstandard y Brotli, codificaciones de canal LDPC de 5G), porque el profesorado de la familia de Informática y Comunicaciones debe transmitir no solo los fundamentos atemporales, sino también su materialización tecnológica actual. Conviene subrayar desde el principio una tesis que recorrerá todo el tema: los principios son estables —el bit, el complemento a dos, la entropía de Shannon llevan décadas inmutables—, mientras que su encarnación tecnológica evoluciona sin cesar; distinguir lo permanente de lo circunstancial es, precisamente, la marca del buen docente de la especialidad.
2. El concepto de información y su representación digital
Conviene distinguir tres planos que con frecuencia se confunden. El dato es el símbolo o conjunto de símbolos en bruto (una secuencia de bits, un número). La información es el dato dotado de significado dentro de un contexto y un convenio de interpretación. El conocimiento es la información integrada en un sistema que permite inferir y decidir. La informática opera directamente sobre datos, pero su finalidad es procesar información; de ahí la importancia capital del código que media entre ambos. Una misma secuencia de bits, 01000001, no significa nada por sí sola: interpretada como entero sin signo vale 65, como carácter ASCII es la letra A, y como fragmento de una instrucción máquina podría ser un código de operación. El significado no reside en los bits, sino en el convenio que decidimos aplicarles; esta es una de las ideas más profundas y a la vez más didácticas de todo el tema.
Un código o codificación es una correspondencia entre un conjunto de objetos (el conjunto fuente: letras del alfabeto, números, instrucciones) y un conjunto de secuencias de símbolos del alfabeto del código (en informática, el alfabeto binario {0,1}). Para que una codificación sea útil debe ser, como mínimo, unívoca (cada objeto tiene una representación) y normalmente biunívoca y decodificable (la secuencia recibida permite reconstruir sin ambigüedad la secuencia de objetos original). Cuando los códigos son de longitud variable —como en la compresión de Huffman o en UTF-8— la decodificabilidad instantánea exige además la propiedad de prefijo: ningún código puede ser el comienzo de otro, de modo que el decodificador reconozca el final de cada símbolo sin retroceder.
La información se representa de forma digital cuando se expresa mediante un número finito de valores discretos, frente a la representación analógica, que emplea magnitudes continuas. La señal analógica reproduce de manera continua la magnitud física que representa; la digital la cuantifica en niveles. La superioridad práctica de lo digital reside en tres propiedades: la robustez frente al ruido (basta distinguir entre dos niveles bien separados), la regeneración sin degradación (una señal digital puede copiarse indefinidamente sin pérdida, mientras que cada copia analógica acumula ruido) y la uniformidad del tratamiento (texto, imagen y sonido, una vez digitalizados, son secuencias de bits que el mismo procesador manipula con las mismas operaciones). A ello se añaden la facilidad de cifrado, de compresión y de detección de errores, todas ellas prácticamente inalcanzables en el dominio analógico. El precio que se paga es doble: la digitalización introduce un error de aproximación inevitable (la cuantificación) y exige más ancho de banda que la señal analógica equivalente; la historia de la ingeniería de las últimas décadas es, en buena medida, la de cómo ese precio se ha vuelto despreciable frente a las ventajas.
El proceso que convierte una magnitud analógica en digital —la digitalización— consta de tres fases. La primera es el muestreo: tomar valores de la señal a intervalos regulares de tiempo. La frecuencia de muestreo la gobierna el teorema de muestreo de Nyquist-Shannon, que exige una frecuencia de muestreo al menos doble de la máxima frecuencia presente en la señal para poder reconstruirla sin pérdida de información; si no se respeta, aparece el fenómeno del aliasing o solapamiento espectral, por el que frecuencias altas se disfrazan de frecuencias bajas inexistentes. Por eso el audio de calidad de disco compacto se muestrea a 44.100 Hz, algo más del doble de los 20 kHz que alcanza el oído humano. La segunda fase es la cuantificación: asignar a cada muestra uno de un número finito de niveles, lo que introduce el inevitable error de cuantificación, cuya magnitud máxima es media unidad del nivel y que se percibe como ruido; a mayor número de bits por muestra (profundidad de bits), menor error y mayor relación señal/ruido, mejorando aproximadamente 6 dB por cada bit añadido. La tercera fase es la codificación: expresar cada nivel como una palabra binaria. Este esquema, que aquí solo se enuncia porque se desarrolla en otros temas, ilustra que la representación digital de magnitudes del mundo real siempre conlleva un compromiso entre fidelidad y coste en bits.
3. Sistemas de numeración y conversiones
Un sistema de numeración posicional en base b representa un número mediante una secuencia de dígitos, donde cada dígito está afectado por un peso que es una potencia de la base según su posición. Si los dígitos son d_{n-1} \dots d_1 d_0 . d_{-1} \dots d_{-m}, el valor es la suma de cada dígito multiplicado por la base elevada a su posición. La base determina cuántos dígitos distintos se emplean: diez en decimal (0-9), dos en binario (0,1), ocho en octal (0-7) y dieciséis en hexadecimal (0-9 y A-F). Frente a los sistemas no posicionales —como la numeración romana, donde el símbolo X vale siempre diez con independencia de su lugar—, la notación posicional, heredada del sistema indoarábigo, permite expresar cualquier número con un puñado de símbolos y sistematizar la aritmética mediante algoritmos sencillos; esta es la razón última de su universalidad.
Merece un inciso la cuestión de por qué la base dos y no otra. Desde un punto de vista teórico, el número de dígitos distintos necesarios para representar un rango dado es proporcional a b/\ln b, cuyo mínimo entre los enteros se alcanza en la base tres —de ahí que existieran computadores ternarios experimentales como el soviético Setún—, con la base dos muy cerca. Pero la balanza se inclina decisivamente hacia el binario por razones físicas y de ingeniería: distinguir dos estados (conduce / no conduce) es infinitamente más robusto y barato de fabricar que distinguir tres, y toda el álgebra de conmutación de Boole, con sus puertas lógicas, opera sobre dos valores. La base dos gana no por ser la más compacta, sino por ser la más fiable de implementar.
El sistema binario es el natural del computador por las razones físicas ya expuestas. Sin embargo, las cadenas binarias resultan largas e ilegibles para el ser humano, de ahí la utilidad del octal y, sobre todo, del hexadecimal, cuyas bases (8 = 2^3 y 16 = 2^4) son potencias de dos. Esta relación permite convertir entre binario y estas bases agrupando bits sin necesidad de operaciones aritméticas: un dígito octal equivale a tres bits y uno hexadecimal a cuatro. El hexadecimal es hoy el estándar de facto para volcados de memoria, direcciones, colores web (#FF8800), códigos de operación y depuración, porque cada byte se expresa con exactamente dos dígitos y cada semibyte o nibble (4 bits) con uno.
3.1. Conversión de una base cualquiera a decimal
Se aplica directamente el teorema fundamental de la numeración: se multiplica cada dígito por la base elevada a su peso posicional y se suman los productos. Así, 1011 en binario equivale a 1\cdot 8 + 0\cdot 4 + 1\cdot 2 + 1\cdot 1 = 11 en decimal; y 2F en hexadecimal equivale a 2\cdot 16 + 15 = 47. La parte fraccionaria usa exponentes negativos: 0,101 en binario es 1\cdot\tfrac{1}{2} + 0\cdot\tfrac{1}{4} + 1\cdot\tfrac{1}{8} = 0{,}625.
Una técnica de cálculo más rápida y menos propensa a errores es el método de Horner (evaluación anidada), que evita calcular potencias: se recorre el número de izquierda a derecha acumulando resultado = resultado · base + dígito. Para 1011 en binario: se parte de 0; 0\cdot2+1=1; 1\cdot2+0=2; 2\cdot2+1=5; 5\cdot2+1=11. El resultado, 11, coincide con el anterior y solo requiere multiplicaciones y sumas encadenadas, exactamente el mismo esquema que emplea el hardware.
3.2. Conversión de decimal a una base cualquiera
La parte entera se convierte por divisiones sucesivas entre la base, tomando los restos en orden inverso al obtenido. Por ejemplo, para convertir 47 a binario: 47 = 23\cdot2 + 1; 23 = 11\cdot2 + 1; 11 = 5\cdot2 + 1; 5 = 2\cdot2 + 1; 2 = 1\cdot2 + 0; 1 = 0\cdot2 + 1. Leyendo los restos de abajo arriba se obtiene 101111, que en efecto vale 32+8+4+2+1 = 47. La parte fraccionaria se convierte por multiplicaciones sucesivas por la base, tomando las partes enteras que van apareciendo en el orden en que surgen. Por ejemplo, 0{,}625: 0{,}625\cdot2 = 1{,}25 \to 1; 0{,}25\cdot2 = 0{,}5 \to 0; 0{,}5\cdot2 = 1{,}0 \to 1; resultado 0,101. Ahora bien, el proceso puede no terminar y generar una representación periódica: 0{,}1 en decimal produce 0,0001100110011… en binario, con el bloque 0011 repitiéndose sin fin. Este hecho anticipa el problema central de la coma flotante: muchos decimales finitos y aparentemente sencillos no tienen representación binaria finita y, por tanto, deberán almacenarse redondeados.
3.3. Conversiones entre binario, octal y hexadecimal
Por la relación entre potencias de dos, basta agrupar bits desde el punto decimal. Para octal se agrupan de tres en tres; para hexadecimal, de cuatro en cuatro, completando con ceros los grupos incompletos por el extremo exterior (a la izquierda en la parte entera, a la derecha en la fraccionaria). Así 11011010 se agrupa como 1101 0010, que es DA en hexadecimal, y como 011 011 010, que es 332 en octal. El proceso inverso expande cada dígito a su grupo de bits: DA → 1101 1010. Esta correspondencia mecánica, sin cálculo aritmético, es lo que convierte al hexadecimal en la notación cómoda del informático, y conviene practicarla hasta reconocer de un vistazo que F son cuatro unos, que 8 es 1000 o que A es 1010.
Figura 1. Conversión por agrupación de bits: de binario a hexadecimal (grupos de 4) y a octal (grupos de 3), sin aritmética.
4. Representación de números enteros
Los enteros sin signo se representan directamente en binario natural: con n bits se cubre el rango de 0 a 2^{n}-1. Así, un byte de 8 bits representa de 0 a 255, y una palabra de 32 bits de 0 a 4.294.967.295. El reto aparece al incorporar el signo, pues el computador solo dispone de ceros y unos: hay que codificar también la negatividad reservando parte de la información disponible. Existen cuatro convenios clásicos, de los cuales solo uno se ha impuesto en la práctica para la aritmética entera.
4.1. Signo-magnitud
Se reserva el bit más significativo para el signo (0 positivo, 1 negativo) y los restantes para la magnitud en binario natural. Es el convenio más intuitivo y el que sigue, internamente, la mantisa de la coma flotante. Sus inconvenientes son graves para la aritmética entera: existe doble representación del cero (+0 = 00000000 y −0 = 10000000), lo que complica las comparaciones, y la suma requiere comparar signos y magnitudes antes de decidir si se suma o se resta, complicando notablemente el circuito. Con n bits el rango es simétrico, de -(2^{n-1}-1) a +(2^{n-1}-1); en 8 bits, de −127 a +127.
4.2. Complemento a uno
El negativo de un número se obtiene invirtiendo todos sus bits (complemento bit a bit). La suma es más sencilla que en signo-magnitud, pero persiste la doble representación del cero (00000000 y 11111111) y la suma exige el llamado acarreo circular (end-around carry): el acarreo que sale del bit más significativo debe volver a sumarse al bit menos significativo, lo que sigue complicando la unidad aritmético-lógica y exige un segundo paso de suma en algunos casos.
4.3. Complemento a dos
Es el convenio universalmente adoptado por los procesadores actuales. El negativo de un número se obtiene invirtiendo todos sus bits y sumando uno; equivalentemente, el valor del número se interpreta dando al bit más significativo un peso negativo, -2^{n-1}, y a los demás su peso positivo habitual:
V = -d_{n-1}\,2^{\,n-1} + \sum_{i=0}^{n-2} d_i\,2^{\,i}Sus ventajas son decisivas. El cero tiene una única representación (00000000). La suma y la resta se realizan con el mismo circuito sumador, tratando los operandos negativos exactamente igual que los positivos, sin acarreo circular; el acarreo que sale por el extremo simplemente se descarta. Y restar equivale a sumar el complemento a dos del sustraendo, de modo que la ALU solo necesita saber sumar. Con n bits el rango es asimétrico, de -2^{n-1} a +2^{n-1}-1: por ejemplo, con 8 bits, de −128 a +127, con un valor negativo más que positivos porque el cero, único, «ocupa» un hueco del lado positivo.
Conviene ver la aritmética en acción. Para calcular 25 - 18 con 8 bits: $25 = $ 00011001 y $-18 = $ 11101110 (complemento a dos de 18). Su suma es 1 00000111; el noveno bit (acarreo de salida) se descarta y queda 00000111 = 7, resultado correcto. La operación de restar se ha resuelto con una simple suma.
Deben dominarse dos consecuencias prácticas. La primera es el desbordamiento (overflow): se produce cuando al sumar dos operandos del mismo signo el resultado cambia de signo, situación imposible que el procesador detecta y señala con un flag de desbordamiento. Por ejemplo, 100 + 50 en 8 bits con signo: 01100100 + 00110010 = 10010110, que interpretado en complemento a dos es −106, absurdo, porque el resultado real, 150, excede el máximo +127; hay overflow. La regla del hardware es elegante: hay desbordamiento si el acarreo que entra al bit de signo y el que sale de él difieren. La segunda consecuencia es la extensión de signo: para ampliar un número a más bits manteniendo su valor, hay que replicar el bit de signo en las posiciones añadidas, no rellenar con ceros. Así, −18 en 8 bits (11101110) se extiende a 16 bits como 11111111 11101110, no como 00000000 11101110. Esta operación es esencial cuando el procesador opera con datos de anchuras distintas.
4.4. Representación en exceso (sesgada)
Consiste en sumar a cada número una constante fija (el exceso o sesgo) de modo que el menor valor representable se codifique como cero y todos los códigos sean no negativos. Con exceso 2^{n-1} (o 2^{n-1}-1), el rango se traslada al terreno de los enteros sin signo. Tiene la virtud de que el orden de los números coincide con el orden de sus códigos binarios sin signo, lo que facilita enormemente las comparaciones. No se usa para los enteros de propósito general, pero es esencial en la coma flotante, donde el exponente se almacena precisamente en exceso para que las comparaciones de magnitud entre reales puedan hacerse, en buena medida, como si los patrones de bits fueran enteros sin signo. La tabla siguiente resume el rango de los cuatro convenios con n bits, un dato que conviene tener automatizado:
| Convenio | Rango con n bits | Rango en 8 bits | Cero |
|---|---|---|---|
| Binario natural (sin signo) | 0 a 2^{n}-1 | 0 a 255 | Único |
| Signo-magnitud | -(2^{n-1}-1) a +(2^{n-1}-1) | −127 a +127 | Doble |
| Complemento a uno | -(2^{n-1}-1) a +(2^{n-1}-1) | −127 a +127 | Doble |
| Complemento a dos | -2^{n-1} a +2^{n-1}-1 | −128 a +127 | Único |
| Exceso 2^{n-1} | -2^{n-1} a +2^{n-1}-1 | −128 a +127 | Único |
Figura 2. El entero −18 en 8 bits según los cuatro convenios, con +18 en binario natural como referencia; el bit de signo (MSB) aparece resaltado.
Figura 3. Figura X. Codificacion paso a paso del numero decimal -6,25 en IEEE 754 de precision simple (32 bits).
5. Representación de números reales: coma flotante IEEE 754
Para representar números con parte fraccionaria existe la coma fija, en la que el punto decimal ocupa una posición predeterminada dentro de la palabra. Es sencilla, rápida y se emplea en aplicaciones de control, procesadores de señal de bajo coste y sistemas financieros con escala fija, pero su rango dinámico es muy limitado: con un número fijo de bits, o bien representa números grandes con poca resolución, o pequeños con poco rango, sin poder ambas cosas a la vez. La solución general es la coma flotante, inspirada en la notación científica: un número se expresa como un signo, una mantisa (los dígitos significativos, también llamada significando) y un exponente que indica dónde va la coma. Al permitir que la coma «flote», se obtiene un enorme rango dinámico con un número fijo de bits, a costa de que la resolución absoluta no sea uniforme: los números representables se apiñan cerca del cero y se separan cada vez más al crecer la magnitud.
5.1. El estándar IEEE 754
Antes de su normalización, cada fabricante empleaba su propio formato de coma flotante, con distinto número de bits, distinto sesgo y distinto redondeo, lo que hacía irreproducibles los cálculos entre máquinas y convertía la portabilidad numérica en una pesadilla. El estándar IEEE 754, publicado en 1985 gracias en buena parte al trabajo de William Kahan (galardonado por ello con el premio Turing), revisado en 2008 y de nuevo en 2019, unificó la representación, las operaciones, los modos de redondeo, el tratamiento de las excepciones y la aritmética exacta hasta el último bit, y es el que implementan hoy todas las unidades de coma flotante. Define varios formatos binarios; los más usados son el de precisión simple (binary32, 32 bits) y el de precisión doble (binary64, 64 bits), a los que se añadieron el de media precisión (binary16, 16 bits, muy usado en aprendizaje automático y gráficos) y el de cuádruple precisión (binary128, 128 bits). La revisión de 2008 incorporó además formatos decimales para el ámbito financiero.
Cada número se descompone en tres campos: un bit de signo, un campo de exponente almacenado en exceso, y un campo de mantisa o fracción. El valor de un número normalizado es:
V = (-1)^{s}\cdot(1{,}M)_2\cdot 2^{\,E-\text{sesgo}}donde s es el signo, M la fracción almacenada y E el exponente sesgado. La clave del formato es el bit implícito: como todo número binario normalizado tiene un 1 a la izquierda de la coma, ese 1 no se almacena, lo que regala un bit de precisión gratis (la precisión efectiva es de 24 y 53 bits en simple y doble, aunque solo se guarden 23 y 52). La tabla siguiente compara los cuatro formatos binarios, un cuadro que conviene retener:
| Formato | Bits totales | Signo | Exponente | Mantisa | Sesgo | Dígitos decimales | Rango aproximado |
|---|---|---|---|---|---|---|---|
Media (binary16) |
16 | 1 | 5 | 10 | 15 | ~3,3 | \pm 6{,}5\cdot10^{4} |
Simple (binary32) |
32 | 1 | 8 | 23 | 127 | ~7,2 | \pm 3{,}4\cdot10^{38} |
Doble (binary64) |
64 | 1 | 11 | 52 | 1023 | ~15,9 | \pm 1{,}8\cdot10^{308} |
Cuádruple (binary128) |
128 | 1 | 15 | 112 | 16383 | ~34,0 | \pm 1{,}2\cdot10^{4932} |
Figura 4. Formato IEEE 754 de precisión simple (32 bits): signo, exponente en exceso (sesgo 127) y mantisa con bit implícito.
Es instructivo codificar un valor concreto paso a paso. Tomemos -6{,}25 en precisión simple. Primero se convierte a binario: $6{,}25 = $ 110,01. Se normaliza desplazando la coma hasta dejar un solo 1 a la izquierda: 1,1001 × 2². El signo es negativo, luego s = 1. El exponente real es 2, y sesgado vale $2 + 127 = 129 = $ 10000001. La mantisa son los bits tras la coma, 1001, rellenados con ceros hasta 23 bits: 10010000000000000000000. El patrón completo es 1 10000001 10010000000000000000000, que en hexadecimal es C0C80000. Este ejercicio, muy del gusto de los tribunales, se ilustra en la figura correspondiente.
5.2. Valores especiales y casos límite
El genio del estándar está en reservar los valores extremos del exponente para codificar situaciones especiales, de modo que el mismo hardware las trate de forma uniforme:
| Exponente | Mantisa | Significado |
|---|---|---|
| Todo ceros | Cero | Cero (con signo: +0 y −0) |
| Todo ceros | No nula | Números desnormalizados (subnormales) |
| Todo unos | Cero | Infinito (+∞ o −∞) |
| Todo unos | No nula | NaN (Not a Number) |
| Resto | Cualquiera | Números normalizados |
Los números desnormalizados (sin bit implícito, con el 1 sustituido por un 0 a la izquierda de la coma, y con exponente mínimo fijo) permiten representar magnitudes muy próximas a cero que de otro modo caerían de golpe al cero, logrando el llamado desbordamiento gradual (gradual underflow), que preserva la propiedad de que x - y = 0 si y solo si x = y. El infinito surge del desbordamiento (overflow) o de dividir un número finito distinto de cero entre cero, y se propaga de forma coherente por las operaciones (1/\infty = 0, \infty + 1 = \infty). El NaN representa resultados indefinidos como 0/0, \infty-\infty o la raíz de un negativo; tiene la propiedad de «contaminar» cualquier operación en la que intervenga (todo resultado con un NaN de entrada es NaN), lo que facilita la detección de errores, y la peculiaridad de no ser igual a sí mismo (\text{NaN} \neq \text{NaN}), truco que usan algunos lenguajes para detectarlo. Existen NaN silenciosos (quiet), que se propagan en silencio, y señalizadores (signaling), que disparan una excepción.
5.3. Precisión, redondeo y consecuencias prácticas
La consecuencia más importante para el docente y el programador es que la aritmética de coma flotante no es exacta. Muchos decimales sencillos, como 0,1, no tienen representación binaria finita (su desarrollo es periódico, como se vio en la sección 3), por lo que se almacenan redondeados al valor representable más próximo; de ahí que comparaciones del tipo 0.1 + 0.2 == 0.3 fallen en la mayoría de lenguajes, ya que el primer miembro se evalúa como 0.30000000000000004. El estándar define varios modos de redondeo —al más cercano con desempate al par (el predeterminado), al más cercano con desempate alejándose del cero, hacia +\infty, hacia -\infty y hacia cero (truncamiento)—, siendo el primero el que minimiza el sesgo estadístico acumulado en cadenas largas de operaciones.
Un fenómeno relacionado con el crecimiento del ULP merece atención: la absorción. Al sumar un número muy grande y otro muy pequeño, si la diferencia de exponentes supera la anchura de la mantisa, el sumando pequeño se pierde por completo tras el redondeo; así, en precisión simple, 10^{8} + 1 puede dar exactamente 10^{8}, como si el 1 no existiera. Esto rompe la asociatividad de la suma —(a+b)+c no siempre coincide con a+(b+c)—, hecho que obliga a los compiladores a ser conservadores al reordenar operaciones y a los programadores a sumar las magnitudes en orden creciente o a emplear algoritmos de suma compensada como el de Kahan.
Dos magnitudes cuantifican la precisión. El épsilon de la máquina es la diferencia entre 1 y el siguiente número representable: vale 2^{-23}\approx1{,}19\cdot10^{-7} en simple y 2^{-52}\approx2{,}22\cdot10^{-16} en doble, y marca la resolución relativa. La unidad en la última posición (ULP) es la distancia entre dos representables consecutivos alrededor de un valor dado, que crece con la magnitud. Así, la precisión simple ofrece unos 7 dígitos decimales significativos y la doble unos 15-16, con independencia de si el número es grande o pequeño. Las buenas prácticas exigen, por tanto, comparar reales mediante una tolerancia (épsilon) en lugar de igualdad estricta, preferir la doble precisión en cálculos sensibles, sumar primero los términos de menor magnitud y ser consciente de la cancelación catastrófica: al restar dos números muy próximos, los dígitos significativos comunes se anulan y afloran, amplificados, los errores de redondeo previos, arruinando la exactitud del resultado. Fenómenos históricos como el fallo del misil Patriot en 1991 —cuyo reloj acumulaba error al convertir décimas de segundo a coma flotante— o la explosión del cohete Ariane 5 en 1996 —por una conversión de un real de 64 bits a un entero de 16 que desbordó— ilustran que estos matices no son académicos, sino cuestión de seguridad y de coste multimillonario.
Como muestra de la vigencia tecnológica del formato, la explosión del aprendizaje automático ha resucitado el interés por las precisiones reducidas. Además del binary16 del estándar, la industria ha adoptado formatos alternativos de 16 bits como el bfloat16 (con los 8 bits de exponente de la precisión simple pero solo 7 de mantisa, sacrificando precisión para conservar el enorme rango dinámico que exige el entrenamiento de redes neuronales) y el TF32 de las GPU, e incluso formatos de 8 bits (FP8, en variantes E4M3 y E5M2) normalizados en 2023 para la inferencia. Todos ellos comparten la misma filosofía de signo, exponente sesgado y mantisa que IEEE 754 estableció en 1985, prueba de que un buen diseño de representación trasciende las modas: cambia el reparto de bits, no los principios.
6. Representación decimal codificada en binario (BCD)
El código BCD (Binary Coded Decimal) representa cada dígito decimal (0-9) mediante su grupo de cuatro bits en binario natural, en lugar de convertir el número completo a binario. Así, 47 en BCD no es 101111, sino 0100 0111. Es un código no ponderado respecto del número completo pero ponderado dígito a dígito (variante 8421, la más común, llamada así por los pesos de sus cuatro bits). Existen variantes en la disposición: el BCD empaquetado aloja dos dígitos por byte (aprovechando los ocho bits), mientras que el desempaquetado usa un byte por dígito, con el semibyte alto a ceros o a un valor de zona, lo que facilita su conversión a caracteres. Otras codificaciones decimales históricas son el exceso-3 (cada dígito se codifica sumándole 3, lo que lo autocomplementa y simplifica la resta) y el código Aiken o 2421, ambos hoy anecdóticos pero frecuentes en preguntas de examen.
Su principal ventaja es que evita los errores de redondeo decimal de la coma flotante binaria —el dígito decimal se conserva exacto— y simplifica la conversión a representaciones legibles, por lo que se emplea históricamente en calculadoras, displays de siete segmentos, relojes digitales y, muy señaladamente, en sistemas financieros y comerciales donde la exactitud decimal es legalmente exigible. Lenguajes y bases de datos ofrecen tipos decimal de precisión arbitraria basados en esta filosofía (el tipo DECIMAL/NUMERIC de SQL, BigDecimal en Java, decimal.Decimal en Python o el estándar IEEE 754 decimal), y el euro, con sus dos decimales exactos, es el ejemplo cotidiano de por qué importa. Su inconveniente es el desperdicio de espacio (de las 16 combinaciones de 4 bits solo se usan 10, las seis restantes 1010-1111 son ilegales) y la mayor complejidad de la aritmética, que requiere una corrección decimal tras cada operación: al sumar dos dígitos BCD, si el resultado excede 9 o genera acarreo se le suma 6 para reajustarlo. Por ejemplo, 8 + 5 en BCD: 1000 + 0101 = 1101 (13, resultado ilegal); al sumar 6 (0110) queda 1 0011, es decir, un acarreo y el dígito 3, o sea 13 en BCD correcto. Este ajuste, que el binario natural no necesita, es el precio de conservar la exactitud decimal.
7. Representación de la información alfanumérica: códigos de caracteres
Representar texto consiste en asignar a cada carácter (letra, dígito, signo de puntuación, símbolo) un número entero, su punto de código, y codificar ese número en bits. La historia de estos códigos es la historia de un problema creciente: cómo acomodar todos los sistemas de escritura del mundo de forma única, eficiente e interoperable.
7.1. ASCII
El código ASCII (American Standard Code for Information Interchange), de 1963, emplea 7 bits y define 128 caracteres: los de control (0-31, más el 127, como el salto de línea LF = 10, el retorno de carro CR = 13, el tabulador HT = 9 o el fin de transmisión), los imprimibles (el espacio = 32, los dígitos, las mayúsculas, las minúsculas y los signos de puntuación) y el de borrado (DEL = 127). Su gran limitación es no contemplar caracteres acentuados, la eñe ni otros alfabetos, lo que lo hace insuficiente fuera del inglés. Conviene recordar su diseño ingenioso, que su estructura hace evidente: los dígitos 0-9 ocupan las posiciones 48-57 (0011 0000 en adelante), de modo que el valor numérico se obtiene restando 48 o, equivalentemente, quedándose con el semibyte bajo; y la diferencia entre una mayúscula y su minúscula es exactamente el bit de peso 32 (A = 65 = 100 0001, a = 97 = 110 0001), lo que reduce el cambio de caja a poner o quitar un único bit. Este orden explica también por qué la ordenación alfabética informática sitúa todas las mayúsculas antes que las minúsculas.
7.2. ISO/IEC 8859
Para cubrir las lenguas europeas se aprovechó el octavo bit, ampliando a 256 caracteres. La familia ISO/IEC 8859 define varias páginas o partes; la más relevante para el español es ISO-8859-1 (Latin-1), que en su mitad alta (128-255) incluye las vocales acentuadas, la eñe, la diéresis y símbolos de uso europeo. Una variante posterior, ISO-8859-15 (Latin-9), sustituyó algunos símbolos poco usados para añadir el símbolo del euro (€), ausente en Latin-1 por ser anterior a la moneda. En el mundo Windows circuló además la página de códigos Windows-1252, muy parecida pero no idéntica a Latin-1, fuente de innumerables confusiones. El problema estructural de todas estas codificaciones es doble: cada página cubre solo un grupo de lenguas (no se puede escribir griego y polaco en el mismo texto), y un mismo byte significa caracteres distintos según la página activa, lo que provoca el conocido fenómeno de los textos ilegibles —el mojibake, con su célebre ñ en lugar de ñ— al abrir un texto con una codificación distinta de aquella con la que se guardó.
7.3. Unicode y sus codificaciones UTF
Unicode resolvió de raíz el problema asignando un punto de código único a cada carácter de prácticamente todos los sistemas de escritura, vivos e históricos, además de símbolos técnicos, matemáticos y emojis. Su espacio abarca 1.114.112 posiciones (de U+0000 a U+10FFFF), organizadas en 17 planos de 65.536 posiciones cada uno; el más usado es el Plano Multilingüe Básico (BMP, U+0000 a U+FFFF), que contiene casi toda la escritura viva, mientras que planos superiores albergan ideogramas raros, escrituras históricas y emojis. La versión 16.0 (2024) supera ya los 150.000 caracteres asignados. Es fundamental comprender que Unicode es independiente de la forma de almacenarlo: define qué número corresponde a cada carácter, pero la codificación de ese número en bytes la realizan los formatos de transformación UTF.
UTF-32 usa 4 bytes fijos por carácter: es trivial de indexar (el carácter n-ésimo está en la posición 4n) pero muy ineficiente en espacio, por lo que se reserva a usos internos. UTF-16 usa 2 o 4 bytes: los caracteres del BMP en dos bytes y el resto mediante pares subrogados (surrogate pairs), dos unidades de 16 bits tomadas de un rango reservado (U+D800 a U+DFFF); es la representación interna de Java, .NET y JavaScript por razones históricas. UTF-8, hoy dominante en la web —donde supera el 98 % de las páginas— y en los sistemas POSIX, es una codificación de longitud variable de 1 a 4 bytes con tres virtudes que explican su éxito. Es retrocompatible con ASCII (los 128 caracteres ASCII se codifican igual, en un solo byte con el bit alto a 0), lo que hace que todo texto ASCII sea ya UTF-8 válido. Es autosincronizable: el primer byte de un carácter multibyte empieza por 110, 1110 o 11110 según su longitud, y los bytes de continuación empiezan siempre por 10, de modo que ante una pérdida se recupera la sincronía en el siguiente carácter y las búsquedas de subcadenas nunca dan falsos positivos. Y es independiente del orden de bytes (endianness), evitando el problema que sí afecta a UTF-16 y UTF-32 y que obliga a estos a anteponer una marca de orden de bytes (BOM). Su algoritmo de codificación es directo: el punto de código se reparte, empezando por los bits menos significativos, entre los huecos de carga útil que dejan los prefijos fijos. Por ejemplo, el euro € = U+20AC = 0010 0000 1010 1100 (13 bits significativos) requiere 3 bytes: 1110·0010 10·000010 10·101100 = E2 82 AC. Un carácter fuera del BMP como el emoji 😀 = U+1F600 necesita 4 bytes en UTF-8 (F0 9F 98 80) y un par subrogado en UTF-16. Por todas estas razones, UTF-8 es la codificación recomendada por defecto en el desarrollo actual y la que el profesorado debe enseñar como estándar.
Dos matices de nivel avanzado distinguen al opositor solvente. El primero es la normalización: un mismo carácter visible puede tener varias representaciones, por ejemplo é como un único punto de código (U+00E9, forma precompuesta) o como e seguida de un acento combinante (U+0065 U+0301, forma descompuesta); Unicode define las formas de normalización NFC (compuesta) y NFD (descompuesta) para comparar textos de forma fiable. El segundo es la distinción entre punto de código, unidad de código y grafema percibido: emojis modernos como 👨👩👧 (familia) o banderas se construyen mediante secuencias de varios puntos de código unidos por el unificador de ancho cero (ZWJ, U+200D), de modo que lo que el usuario percibe como un solo carácter puede ocupar decenas de bytes. Contar «caracteres» en Unicode es, por tanto, una operación mucho menos trivial de lo que aparenta.
Figura 5. Codificación UTF-8 de longitud variable (1 a 4 bytes): bits de prefijo fijos, bits de carga útil y ejemplo é = U+00E9 → C3 A9.
8. Códigos detectores y correctores de error
Tanto la transmisión como el almacenamiento de información están sujetos a errores: ruido en el canal, interferencias electromagnéticas, defectos del soporte, radiación cósmica que voltea un bit en la memoria. Los códigos de control de errores añaden redundancia controlada a los datos para detectar e incluso corregir esas alteraciones. La idea central es la distancia de Hamming entre dos palabras código: el número de posiciones de bit en que difieren. Si se dispersan las palabras válidas de modo que la distancia mínima entre cualesquiera dos sea d, el código puede detectar hasta d-1 errores (porque hacen falta al menos d cambios para convertir una palabra válida en otra) y corregir hasta [(d-1)/2] errores (asignando la palabra recibida a la válida más próxima). Geométricamente, cada palabra válida es el centro de una esfera de radio corrector, y el código funciona mientras esas esferas no se solapen. Se distinguen los códigos de bloque, que procesan palabras de longitud fija, de los códigos convolucionales, que operan sobre un flujo continuo con memoria.
8.1. Control de paridad
Es el mecanismo más simple: se añade un bit de paridad que hace que el número total de unos sea par (paridad par) o impar (paridad impar). Con distancia mínima 2, detecta cualquier número impar de errores, pero no los corrige ni detecta un número par de ellos (dos bits volteados pasan inadvertidos). La paridad cruzada o bidimensional (bits de paridad longitudinales y transversales sobre una matriz de bits) eleva la distancia mínima a 4 y permite localizar y corregir un error aislado, al señalar simultáneamente la fila y la columna afectadas por su intersección; es el germen conceptual de códigos más potentes.
8.2. Código de Hamming
Es un código corrector de errores, propuesto por Richard Hamming en 1950, que coloca bits de paridad en las posiciones que son potencia de dos (1, 2, 4, 8, …), de modo que cada bit de control vigila un subconjunto bien elegido de posiciones: el bit en la posición 2^k controla todas las posiciones cuyo índice tiene el bit k-ésimo a uno. Al recibir la palabra se recalculan las paridades; el conjunto de discrepancias, leído como un número binario denominado síndrome, indica directamente la posición del bit erróneo (0 si no hay error), que basta con invertir para corregirlo. Esta autolocalización sin búsqueda es lo que hace elegante al código. El número de bits de paridad r necesarios para m bits de datos cumple 2^{r} \ge m + r + 1; así, 4 bits de paridad protegen hasta 11 de datos (código Hamming(15,11)). El código Hamming clásico tiene distancia mínima 3 y corrige un error. Añadiendo un bit de paridad global se obtiene el SECDED (Single Error Correction, Double Error Detection), de distancia 4, que corrige un error y detecta dos sin confundirlos: es la base de la memoria ECC empleada en servidores y sistemas críticos para corregir los errores espontáneos («soft errors») que la radiación o el ruido provocan en la DRAM.
Figura 6. Código de Hamming: los bits de paridad ocupan las posiciones potencia de dos y cada uno controla un subconjunto bien elegido de posiciones.
8.3. Comprobación de redundancia cíclica (CRC)
El CRC es la técnica de detección dominante en redes y almacenamiento por su gran eficacia frente a los errores en ráfaga (burst errors), típicos de los canales reales. Se basa en la aritmética de polinomios sobre el cuerpo binario GF(2), donde la suma y la resta son la operación XOR y no hay acarreos. El mensaje se interpreta como un polinomio, se le anexan tantos ceros como el grado del polinomio generador, y se divide por este mediante divisiones XOR sucesivas; el resto de esa división —la secuencia de comprobación de trama o FCS— sustituye a esos ceros y viaja con el mensaje. El receptor divide la trama completa recibida por el mismo generador: si el resto es nulo, se acepta; si no, hay error. Variantes como CRC-32 (con generador de grado 32, usada en Ethernet, ZIP, PNG y gzip) garantizan la detección de todos los errores simples y dobles, de todo número impar de errores, de todas las ráfagas de longitud menor o igual a 32 bits y de la inmensa mayoría de las ráfagas más largas, con una probabilidad de error no detectado inferior a 2^{-32}. No corrige, solo detecta, pero su coste de cálculo es bajísimo y se implementa con enorme facilidad en hardware mediante un registro de desplazamiento realimentado (LFSR) con puertas XOR, procesando un bit por ciclo, o con tablas precalculadas por software.
Figura 7. Figura X. Calculo de un CRC mediante division binaria XOR: el resto es la secuencia de comprobacion (FCS).
Para canales muy ruidosos, donde la mera detección obligaría a retransmitir demasiado, se emplean códigos correctores más potentes que trabajan «hacia adelante» (Forward Error Correction, FEC). Los códigos Reed-Solomon, correctores de ráfagas por excelencia, protegen los CD, DVD, discos Blu-ray, códigos QR y las comunicaciones del espacio profundo, pues corrigen no bits sueltos sino símbolos enteros dañados. Los modernos códigos LDPC (Low-Density Parity-Check, reivindicados décadas después de su invención por Gallager) y los turbo-códigos se aproximan a menos de una fracción de decibelio del límite teórico de Shannon y son la norma en Wi-Fi (802.11n en adelante), 4G/5G, DVB y el almacenamiento de alta densidad. Los códigos polares, propuestos por Arıkan en 2009 y adoptados para los canales de control de 5G, son la primera familia con demostración matemática de que alcanzan la capacidad del canal. Este ascenso hacia el límite de Shannon es uno de los grandes logros de la ingeniería de las últimas décadas.
9. Magnitudes de información y unidades de medida
La unidad elemental de información es el bit (binary digit), que representa la elección entre dos alternativas equiprobables. Agrupaciones intermedias son el nibble o semibyte (4 bits, un dígito hexadecimal) y, sobre todo, el byte u octeto, agrupamiento estándar de 8 bits que puede representar 256 valores distintos y constituye la unidad direccionable básica en la práctica totalidad de las arquitecturas. La palabra (word) es la anchura natural de datos del procesador (32 o 64 bits en los actuales). Sobre el byte se construyen los múltiplos para magnitudes mayores.
Aquí surge una confusión frecuente y normativamente relevante. Tradicionalmente, en informática los múltiplos se calculaban en potencias de 1024 (2^{10}), de modo que un «kilobyte» eran 1024 bytes, un «megabyte» 1024 kilobytes, etcétera. Sin embargo, los prefijos del Sistema Internacional (kilo, mega, giga) significan estrictamente potencias de 1000. Para resolver la ambigüedad, la norma IEC 60027-2, hoy consolidada en la IEC 80000-13, introdujo prefijos binarios específicos: kibi (Ki = 2^{10}), mebi (Mi = 2^{20}), gibi (Gi = 2^{30}), tebi (Ti = 2^{40}), y así sucesivamente. Según esta norma, lo correcto es decir 1 KiB = 1024 bytes, reservando 1 kB para 1000 bytes.
| Prefijo binario | Símbolo | Valor | Prefijo SI | Símbolo | Valor |
|---|---|---|---|---|---|
| kibi | Ki | 2^{10} = 1024 | kilo | k | 10^{3} = 1000 |
| mebi | Mi | 2^{20} | mega | M | 10^{6} |
| gibi | Gi | 2^{30} | giga | G | 10^{9} |
| tebi | Ti | 2^{40} | tera | T | 10^{12} |
| pebi | Pi | 2^{50} | peta | P | 10^{15} |
La divergencia entre ambas escalas crece con el tamaño: es del 2,4 % en el nivel kilo, pero llega al 10 % en el nivel tera y sigue aumentando. Esto explica una discrepancia cotidiana: los fabricantes de discos miden la capacidad en potencias de 1000 (gigabytes SI), mientras muchos sistemas operativos la muestran en potencias de 1024 (gibibytes) pero rotulándola erróneamente como «GB», por lo que un disco de «1 TB» aparece como unos 931 «GB» —en realidad 931 GiB—, con la consiguiente sensación de capacidad perdida. Conviene también distinguir con rigor las unidades de capacidad de almacenamiento (en bytes, símbolo B mayúscula) de las de velocidad de transmisión (en bits por segundo, bps o b/s minúscula, y sus múltiplos kbps, Mbps, Gbps), error frecuentísimo entre el alumnado: una conexión de «100 Mbps» descarga como máximo unos 12,5 MB/s, ocho veces menos, y aún menos descontada la sobrecarga de los protocolos.
10. Fundamentos de teoría de la información
En 1948, Claude Shannon publicó A Mathematical Theory of Communication, artículo que fundó por sí solo la teoría de la información y dio un significado matemático preciso a la cantidad de información. Su aportación decisiva fue medir la información en función de la incertidumbre o sorpresa: un suceso muy probable aporta poca información cuando ocurre («mañana saldrá el sol»); uno improbable aporta mucha («mañana nevará en el desierto»). Formalmente, la información propia de un suceso de probabilidad p es
I = \log_2\frac{1}{p} = -\log_2 p \quad \text{(bits)},de modo que un suceso de probabilidad 1/2 aporta exactamente 1 bit, y uno seguro (p=1) aporta 0 bits. El logaritmo garantiza que la información de sucesos independientes se suma, propiedad esencial que distingue a esta medida.
10.1. Entropía
La entropía de una fuente es la cantidad media de información por símbolo, es decir, la esperanza matemática de la información de sus símbolos:
H(X) = -\sum_{i=1}^{n} p_i \log_2 p_i \quad \text{(bits/símbolo)}.Es máxima, e igual a \log_2 n, cuando todos los símbolos son equiprobables (máxima incertidumbre), y nula cuando uno es seguro. Un ejemplo aclara su cálculo: una fuente con cuatro símbolos de probabilidades \tfrac12, \tfrac14, \tfrac18, \tfrac18 tiene entropía H = \tfrac12\cdot1 + \tfrac14\cdot2 + \tfrac18\cdot3 + \tfrac18\cdot3 = 1{,}75 bits/símbolo, frente a los 2 bits que exigiría una codificación de longitud fija; esos 0,25 bits de diferencia son la redundancia aprovechable. La entropía marca el límite teórico inferior del número medio de bits necesario para codificar sin pérdida los símbolos de la fuente: ningún código sin pérdida puede comprimir, en promedio, por debajo de la entropía. Este es el primer teorema de Shannon (codificación de fuente) y el fundamento de toda la compresión sin pérdida. La desigualdad de Kraft complementa el resultado, fijando qué conjuntos de longitudes de código son realizables con la propiedad de prefijo.
10.2. Redundancia
La redundancia es la diferencia entre la longitud media real de una codificación y la entropía de la fuente; es decir, los bits «de sobra» respecto al mínimo teórico. La redundancia no siempre es indeseable: la compresión busca eliminarla para ahorrar espacio, pero los códigos correctores de errores la añaden deliberada y controladamente para ganar fiabilidad. Comprimir y proteger frente a errores son, en cierto sentido, operaciones opuestas sobre la redundancia, y todo sistema de comunicaciones busca su punto de equilibrio: primero comprime la fuente para eliminar la redundancia natural (a menudo desestructurada e inútil) y luego añade una redundancia estructurada y eficiente para protegerse del canal. Las lenguas naturales, dicho sea de paso, son altamente redundantes —el español ronda 1 a 1,5 bits por letra frente a los 4,7 de una fuente uniforme de 26 letras—, lo que explica que podamos leer un texto con erratas o abreviado.
10.3. Capacidad de un canal
El segundo teorema de Shannon (codificación de canal) establece que todo canal con ruido tiene una capacidad máxima, expresada en bits por segundo, por debajo de la cual es posible transmitir con una probabilidad de error tan pequeña como se quiera, empleando códigos correctores suficientemente elaborados; por encima de ella, la transmisión fiable es imposible por más redundancia que se añada. Para el canal gaussiano limitado en banda, la fórmula de Shannon-Hartley cuantifica esa capacidad:
C = B \cdot \log_2\!\left(1 + \dfrac{S}{N}\right) \quad \text{(bits/s)},donde B es el ancho de banda en hercios y S/N la relación señal/ruido en veces (no en decibelios). Por ejemplo, un canal telefónico de 3.100 Hz con una relación señal/ruido de 30 dB (una razón de 1000) tiene una capacidad de C = 3100\cdot\log_2(1001) \approx 30.900 bits/s, cifra que explica por qué los módems telefónicos se estancaron cerca de esa velocidad. Este resultado, profundamente contraintuitivo en su día, garantiza que el ruido no impide la comunicación perfecta, sino que solo limita su velocidad, y orienta el diseño de todos los sistemas de comunicación modernos —de la fibra óptica al 5G— hacia ese límite infranqueable.
11. Comunicación y transmisión de datos
La comunicación es el proceso de transferir información de un emisor a un receptor a través de un canal mediante un mensaje codificado. El modelo de Shannon-Weaver identifica los elementos esenciales: una fuente de información, un codificador/transmisor que la convierte en señal apta para el medio, un canal (afectado por una fuente de ruido), un receptor/decodificador que reconstruye el mensaje y un destino. Este esquema atemporal es el que subyace a toda la materia de redes y el que da sentido a los códigos de fuente y de canal estudiados en las secciones anteriores.
La transmisión de datos es la materialización física de ese envío. Sin entrar en el detalle propio de otros temas, conviene fijar la terminología básica en tres ejes. Según el sentido del flujo, la transmisión puede ser símplex (un solo sentido, como la radiodifusión), semidúplex (ambos sentidos, pero no simultáneos, como un walkie-talkie) o dúplex o full-duplex (ambos sentidos a la vez, como la telefonía). Según la disposición de los bits, serie (los bits viajan uno tras otro por una única línea, lo habitual en distancias largas y en los buses modernos como USB, PCIe o SATA, que abandonaron el paralelo por problemas de sincronismo a alta frecuencia) o paralelo (varios bits simultáneos por líneas distintas, hoy relegado al interior de los chips). Y según el referente temporal, síncrona (emisor y receptor comparten una referencia de reloj y los datos fluyen en bloques continuos) o asíncrona (cada carácter se enmarca con bits de inicio y parada, sin reloj común, como en el clásico puerto serie RS-232).
La señal puede transmitirse en banda base (los pulsos digitales directamente sobre el medio, mediante codificaciones de línea como NRZ o Manchester) o mediante modulación de una portadora, alterando su amplitud (ASK), su frecuencia (FSK) o su fase (PSK) —o combinaciones de amplitud y fase, como en la QAM, que empaqueta muchos bits por símbolo— para representar los bits, lo que permite adaptar la señal al medio, salvar largas distancias y multiplexar varias comunicaciones. Precisamente la multiplexación —por división en frecuencia (FDM), en tiempo (TDM) o, en fibra óptica, en longitud de onda (WDM)— es la que permite compartir un mismo medio físico entre múltiples flujos. Es capital no confundir la velocidad de transmisión, en bits por segundo, con la velocidad de modulación en baudios (símbolos por segundo): cada símbolo puede transportar varios bits según el esquema empleado, de modo que una modulación 256-QAM transmite 8 bits por baudio. El teorema de Nyquist fija el número máximo de símbolos por segundo que un canal de ancho de banda B admite sin interferencia entre símbolos (2B), y la fórmula C = 2B\log_2 M da la tasa binaria en un canal sin ruido con M niveles de señal; cuando hay ruido, es el límite de Shannon del apartado anterior el que manda. Todo este aparato práctico se rige, en última instancia, por esa capacidad de canal, lo que une de nuevo teoría y técnica.
12. Compresión de la información
La compresión reduce el número de bits necesarios para representar una información, eliminando redundancia. Su eficacia se mide por la tasa o razón de compresión (tamaño original entre comprimido) o por el porcentaje de ahorro. Se distinguen dos grandes familias según la fidelidad del resultado.
12.1. Compresión sin pérdida
La compresión sin pérdida (lossless) permite reconstruir exactamente el dato original, bit a bit. Es obligatoria para texto, código ejecutable, bases de datos y, en general, allí donde cualquier alteración sería inaceptable. Sus técnicas explotan la redundancia estadística y estructural. La codificación de entropía asigna códigos más cortos a los símbolos más frecuentes: el algoritmo de Huffman (1952) construye, mediante un árbol binario levantado de abajo arriba combinando repetidamente los dos símbolos menos probables, un código de prefijo de longitud variable óptimo símbolo a símbolo; la codificación aritmética y su variante moderna, los sistemas numéricos asimétricos (ANS), superan esa limitación al no exigir un número entero de bits por símbolo, acercándose aún más al límite de entropía y sustentando compresores actuales como Zstandard. La codificación por longitud de series (RLE) sustituye repeticiones consecutivas por un par (valor, número de repeticiones), útil en imágenes con grandes zonas uniformes. Los métodos de diccionario de la familia Lempel-Ziv (LZ77, LZ78 y su derivado LZW) sustituyen secuencias repetidas por referencias a apariciones anteriores y son el corazón de formatos como ZIP, gzip, PNG y GIF; el algoritmo DEFLATE combina LZ77 con Huffman. La eficacia de la compresión sin pérdida está acotada precisamente por la entropía de la fuente: datos ya aleatorios o ya comprimidos no admiten reducción ulterior, hecho que a veces se enuncia como el «teorema del recuento» y que desmiente la existencia de compresores universales que reduzcan cualquier fichero.
Figura 8. Figura X. Construccion de un arbol de Huffman y codigos resultantes para cinco simbolos.
La tabla siguiente sitúa los compresores sin pérdida de uso general vigentes en 2026, cuyo compromiso característico es velocidad frente a ratio:
| Algoritmo / formato | Técnica base | Perfil de uso |
|---|---|---|
gzip / DEFLATE |
LZ77 + Huffman | Veterano, universal, ratio moderado |
bzip2 |
BWT + Huffman | Mejor ratio, más lento |
Zstandard (zstd) |
LZ + ANS | Muy rápido, ratio alto, dominante hoy |
| Brotli | LZ + contexto + diccionario | Web (HTTP), excelente en texto |
LZMA / xz / 7-Zip |
LZ + rango | Máximo ratio, uso en archivado |
12.2. Compresión con pérdida
La compresión con pérdida (lossy) descarta información considerada poco perceptible o irrelevante para obtener tasas de reducción muy superiores, imposibles sin pérdida. Solo es admisible en datos destinados a la percepción humana —imagen, audio y vídeo—, donde se aprovechan las limitaciones de la vista y el oído (modelos psicovisuales y psicoacústicos). El estándar JPEG comprime imágenes en una tubería característica: convierte el color a un espacio luminancia-crominancia, submuestrea la crominancia (a la que el ojo es menos sensible), aplica la transformada discreta del coseno (DCT) a bloques de 8×8 píxeles para pasar al dominio de la frecuencia, cuantifica los coeficientes descartando las altas frecuencias poco visibles —aquí ocurre la pérdida, gobernada por el factor de calidad— y finalmente codifica el resultado sin pérdida con RLE y Huffman. En audio, MP3 y AAC eliminan los sonidos enmascarados por otros más intensos o inaudibles según el modelo psicoacústico. Los códecs de vídeo (la familia H.26x —H.264/AVC, H.265/HEVC y el reciente H.266/VVC— junto a las alternativas abiertas y libres de regalías AV1 y VP9) combinan la compresión espacial de cada fotograma (intra) con la predicción temporal entre fotogramas (inter), transmitiendo solo las diferencias respecto a fotogramas de referencia mediante vectores de movimiento. El compromiso fundamental de la compresión con pérdida es entre tasa de compresión y calidad percibida: a mayor compresión, mayor degradación (bloques, difuminado, artefactos), controlada por un parámetro de calidad que el diseñador ajusta según el destino. En la frontera actual, técnicas basadas en aprendizaje automático (compresión neuronal) empiezan a superar a los códecs clásicos en calidad por bit, anticipando la próxima generación de estándares.
13. Aplicación didáctica y relación con el currículo
Los contenidos de este tema constituyen el fundamento transversal de toda la familia profesional de Informática y Comunicaciones y aparecen, con distinta profundidad, en numerosos módulos y materias del sistema educativo regulado por la LOE 2/2006 modificada por la LOMLOE 3/2020 y, en Formación Profesional, por la Ley Orgánica 3/2022 de ordenación e integración de la Formación Profesional (LOFP) y su desarrollo en el Real Decreto 659/2023. En la Comunitat Valenciana, este marco se concreta en los decretos del Consell de currículo de la ESO y el Bachillerato (Decreto 107/2022 y Decreto 108/2022) y en la normativa de la Conselleria de Educación que ordena las enseñanzas de Formación Profesional.
En la Educación Secundaria Obligatoria y el Bachillerato, la representación binaria de la información, las unidades de medida y la digitalización de texto, imagen y sonido se abordan en materias como Tecnología y Digitalización y Digitalización, donde el alumnado comprende por primera vez que todo dato es, en el fondo, una secuencia de bits, sirviendo de puente hacia la competencia digital y hacia el pensamiento computacional que la LOMLOE prescribe como saber básico.
En la Formación Profesional, el tema da soporte directo a varios módulos. En el CFGM de Sistemas Microinformáticos y Redes, los sistemas de numeración y las unidades de información son base de los módulos de Montaje y Mantenimiento de Equipos y de Redes Locales, donde el control de errores y la transmisión cobran pleno sentido. En los CFGS de Desarrollo de Aplicaciones Multiplataforma y Desarrollo de Aplicaciones Web, la representación de enteros y reales (complemento a dos, IEEE 754), los tipos de datos primitivos y las codificaciones de caracteres (UTF-8) son imprescindibles en los módulos de Programación, Bases de Datos y Lenguajes de Marcas, donde los errores de redondeo en coma flotante o los problemas de codificación de caracteres son una fuente habitual y muy real de fallos. En el CFGS de Administración de Sistemas Informáticos en Red, las unidades de capacidad, el direccionamiento hexadecimal y la integridad de datos (paridad, ECC, CRC, sumas de verificación) son nucleares en la gestión de sistemas, el almacenamiento y las copias de seguridad.
Desde el punto de vista metodológico, conviene un enfoque constructivista y basado en problemas: partir de preguntas reales y provocadoras (¿por qué 0.1 + 0.2 no da 0.3?, ¿por qué un texto se ve con símbolos raros al cambiar de editor?, ¿por qué un disco de «1 TB» muestra menos capacidad de la anunciada?) para introducir los conceptos por necesidad y no por imposición. El uso de herramientas de conversión de bases, editores hexadecimales (hexdump, xxd), depuradores que muestran la representación interna de los datos y pequeños programas que revelan la codificación de un texto favorece el aprendizaje significativo. Todo ello permite atender a la diversidad mediante distintos niveles de profundización y evaluar por competencias a través de situaciones de aprendizaje contextualizadas —analizar un volcado de memoria, diseñar un pequeño código detector de errores, comparar formatos de compresión sobre archivos propios—, tal como prescribe el currículo vigente.
14. Conclusión
La representación y la comunicación de la información son los dos pilares sobre los que se sostiene la informática como disciplina. Hemos visto cómo el bit, unidad mínima, permite codificar números enteros mediante el complemento a dos —universal por la elegancia con que unifica suma y resta en un mismo circuito—, números reales mediante el estándar IEEE 754 —con su ingenioso bit implícito, su exponente en exceso, su tratamiento uniforme de ceros, infinitos y NaN, y su inevitable inexactitud, que todo programador debe conocer—, y caracteres mediante una evolución histórica que, desde el ASCII de 7 bits, culmina en Unicode y su codificación UTF-8, hoy estándar de facto de la web. Hemos analizado cómo proteger esa información frente a los errores con códigos detectores y correctores, desde la humilde paridad hasta el CRC y los modernos LDPC, turbo y polares que rozan el límite teórico, y cómo medirla y comprimirla a la luz de la teoría de la información de Shannon, cuyos dos teoremas fijan los límites infranqueables tanto de la compresión (la entropía) como de la transmisión fiable (la capacidad del canal).
El hilo conductor es siempre el mismo: toda la potencia del computador y de las redes nace de convenios de codificación rigurosos y de leyes matemáticas precisas e inmutables. Comprender estos fundamentos no es un ejercicio académico, sino la condición para diagnosticar errores reales, elegir la representación adecuada a cada problema y enseñar con solvencia una materia que, pese a la vertiginosa evolución de la tecnología —de UTF-8 a AV1, de la memoria ECC al 5G—, conserva intactos sus principios. Para el futuro docente de la especialidad de Informática, dominar este tema es disponer del lenguaje común con el que se construyen, sin excepción, todos los demás.
15. Bibliografía y referencias
(a) Referencias técnicas y estándares
- Tanenbaum, A. S. y Austin, T. (2013). Organización de computadoras: un enfoque estructurado. Pearson.
- Stallings, W. (2016). Organización y arquitectura de computadores. Pearson.
- Hennessy, J. L. y Patterson, D. A. (2019). Arquitectura de computadores: un enfoque cuantitativo. Morgan Kaufmann.
- Stallings, W. (2014). Comunicaciones y redes de computadores. Pearson.
- Cover, T. M. y Thomas, J. A. (2006). Elements of Information Theory. Wiley.
- Shannon, C. E. (1948). A Mathematical Theory of Communication. Bell System Technical Journal.
- Sayood, K. (2017). Introduction to Data Compression. Morgan Kaufmann.
- Goldberg, D. (1991). What Every Computer Scientist Should Know About Floating-Point Arithmetic. ACM Computing Surveys.
- IEEE (2019). IEEE Standard for Floating-Point Arithmetic (IEEE 754-2019). IEEE.
- The Unicode Consortium. The Unicode Standard, Version 16.0. Recurso en línea: https://www.unicode.org
- ISO/IEC 80000-13:2008. Quantities and units — Part 13: Information science and technology. ISO.
- Internet Engineering Task Force. RFC 3629: UTF-8, a transformation format of ISO 10646. https://www.rfc-editor.org
(b) Referencias normativas
- Ley Orgánica 2/2006, de 3 de mayo, de Educación (LOE), modificada por la Ley Orgánica 3/2020, de 29 de diciembre (LOMLOE).
- Ley Orgánica 3/2022, de 31 de marzo, de ordenación e integración de la Formación Profesional (LOFP).
- Real Decreto 659/2023, de 18 de julio, por el que se desarrolla la ordenación del Sistema de Formación Profesional.
- Reales Decretos de los títulos de la familia profesional Informática y Comunicaciones (CFGM Sistemas Microinformáticos y Redes; CFGS Desarrollo de Aplicaciones Multiplataforma, Desarrollo de Aplicaciones Web y Administración de Sistemas Informáticos en Red).
- Orden de 1 de febrero de 1996 por la que se aprueban los temarios que han de regir en los procedimientos de ingreso a los Cuerpos de Profesores (especialidad de Informática).
- Decreto 107/2022 y Decreto 108/2022 del Consell, por los que se establecen la ordenación y el currículo de la Educación Secundaria Obligatoria y del Bachillerato en la Comunitat Valenciana, y normativa de desarrollo curricular de la Formación Profesional. Portal de la Conselleria de Educación: https://ceice.gva.es
Orientaciones para el estudio
- Practique las conversiones entre bases y el complemento a dos hasta automatizarlas: en el examen escrito ahorran tiempo y demuestran solvencia; no fíe estos cálculos a la improvisación y verifique siempre con la reconversión.
- Memorice la estructura de los campos de IEEE 754 (signo, exponente en exceso, mantisa con bit implícito) y ensaye el ejemplo completo de codificar un valor negativo con decimales; sepa explicar con
0,1por qué la aritmética no es exacta. Es una pregunta recurrente del tribunal. - Distinga con claridad los tres ejes que suelen confundirse: detección frente a corrección de errores, compresión con frente a sin pérdida, y prefijos binarios (kibi) frente a SI (kilo); tenga a mano un ejemplo numérico de cada uno.
- Vincule siempre la parte teórica (entropía y capacidad de Shannon) con sus consecuencias prácticas (límites de la compresión y de la transmisión) mediante un cálculo concreto: el tribunal valora la madurez conceptual, no la mera enumeración.
- Actualice el tema con al menos un dato de estado del arte 2026 (UTF-8 sobre el 98 % de la web, Zstandard, AV1, códigos polares en 5G): demuestra que domina no solo los fundamentos, sino su vigencia tecnológica.
- Reserve entre seis y ocho minutos finales para el epígrafe de aplicación didáctica y la conclusión; un tema técnico impecable pero sin conexión curricular pierde muchos puntos en una oposición docente.
- Prepare un esquema-resumen de una página con las definiciones, tablas y fórmulas clave para repasar las vísperas y para estructurar mentalmente la exposición ante el tribunal.