Representación de la información

Los sistemas informáticos representan la información mediante códigos binarios (0 y 1), lo que les permite almacenar, procesar y transmitir datos de cualquier tipo.


Sistemas de Numeración en Informática

Un sistema de numeración se define por su base, que indica la cantidad de símbolos disponibles para representar las cantidades:

  • Sistema Binario (Base 2): Utiliza únicamente dos dígitos (0 y 1). Es el lenguaje fundamental de la electrónica digital y de los microprocesadores, donde cada dígito representa un bit (presencia o ausencia de pulso eléctrico).
  • Sistema Decimal (Base 10): El sistema convencional empleado por los seres humanos, basado en diez símbolos del 0 al 9. Se utiliza en la interfaz de usuario para mostrar información comprensible.
  • Sistema Hexadecimal (Base 16): Utiliza dieciséis símbolos: del 0 al 9 y las letras de la A a la F (donde A = 10, B = 11, hasta F = 15). Es ampliamente utilizado en informática para simplificar la lectura de largas cadenas binarias (por ejemplo, en direcciones MAC, códigos de color RGB o valores de memoria RAM).
  • Sistema Octal (Base 8): Utiliza ocho dígitos, del 0 al 7. Históricamente empleado en sistemas UNIX y Linux para la gestión simplificada de los permisos de archivos y directorios.
Decimal (Base 10) Binario (Base 2) Hexadecimal (Base 16) Octal (Base 8)
010 00002 016 08
110 00012 116 18
210 00102 216 28
310 00112 316 38
410 01002 416 48
510 01012 516 58
610 01102 616 68
710 01112 716 78
810 10002 816 108
910 10012 916 118
1010 10102 A16 128
1110 10112 B16 138
1210 11002 C16 148
1310 11012 D16 158
1410 11102 E16 168
1510 11112 F16 178

Teorema fundamental de la numeración

Todos estos sistemas son posicionales, por lo que el valor de cada cifra depende de la posición que ocupa dentro del número. Este principio queda recogido en el Teorema Fundamental de la Numeración, que constituye la base para representar y convertir números entre distintos sistemas de numeración:

$$N_b = \sum_{i=-k}^{n-1} d_i \cdot b^i$$

Donde:

  • $N_b$: Valor del número en base $b$.
  • $b$: Base del sistema de numeración (2, 8, 10, 16, etc.).
  • $d_i$: Cada uno de los dígitos que componen el número en la posición $i$.
  • $n$: Número de dígitos de la parte entera.
  • $k$: Número de dígitos de la parte fraccionaria (si la hubiera).

Ejemplo:

Vamos a descomponer el número decimal con parte fraccionaria $345,25_{(10}$ aplicando la fórmula del Teorema Fundamental de la Numeración:

  • Base ($b$): 10
  • Dígitos de la parte entera ($n$): 3 (posiciones 2, 1 y 0)
  • Dígitos de la parte fraccionaria ($k$): 2 (posiciones -1 y -2)

Desarrollo del sumatorio:

$$N_{10} = (3 \cdot 10^2) + (4 \cdot 10^1) + (5 \cdot 10^0) + (2 \cdot 10^{-1}) + (5 \cdot 10^{-2})$$

Calculando cada término:

  • $3 \cdot 100 = 300$ (Centenas)
  • $4 \cdot 10 = 40$ (Decenas)
  • $5 \cdot 1 = 5$ (Unidades)
  • $2 \cdot 0,1 = 0,2$ (Décimas)
  • $5 \cdot 0,01 = 0,05$ (Centésimas)
Suma total: $300 + 40 + 5 + 0,2 + 0,05 = 345,25_{10}$

Conversión entre Sistemas de Numeración

Para operar en entornos técnicos, es necesario saber transformar valores numéricos de una base a otra mediante procedimientos matemáticos estructurados:

1. Conversión de Decimal a Binario (Ejemplo: $75_{10}$)

Para convertir un número decimal a binario, se divide el número entre 2 sucesivamente y se anotan los restos de cada división. El resultado se obtiene leyendo el último cociente y todos los restos en orden inverso (de abajo hacia arriba).

Pasos del algoritmo:

  • 75 / 2 = 37 → Resto: 1 (Bit menos significativo)
  • 37 / 2 = 18 → Resto: 1
  • 18 / 2 = 9   → Resto: 0
  • 9 / 2 = 4     → Resto: 1
  • 4 / 2 = 2     → Resto: 0
  • 2 / 2 = 1     → Resto: 0
  • 1 / 2 = 0     → Resto: 1 (Último cociente / Bit más significativo)
Resultado: Leídos de abajo hacia arriba, los restos forman el número: $75_{10} = 1001011_2$

2. Conversión de Binario a Decimal (Ejemplo: $110101_2$)

Se aplica el Teorema Fundamental de la Numeración, multiplicando cada bit por la potencia de base 2 correspondiente a su posición (empezando por la posición 0 desde la derecha) y se suman todos los productos resultantes.

Pasos del algoritmo:

  • Posición 5: $1 \cdot 2^5 = 1 \cdot 32 = 32$
  • Posición 4: $1 \cdot 2^4 = 1 \cdot 16 = 16$
  • Posición 3: $0 \cdot 2^3 = 0 \cdot 8 = 0$
  • Posición 2: $1 \cdot 2^2 = 1 \cdot 4 = 4$
  • Posición 1: $0 \cdot 2^1 = 0 \cdot 2 = 0$
  • Posición 0: $1 \cdot 2^0 = 1 \cdot 1 = 1$

Suma de las potencias: $32 + 16 + 0 + 4 + 0 + 1 = 53$

Resultado: $110101_2 = 53_{10}$

3. Conversión de Binario a Hexadecimal (Ejemplo: $11101011110_2$)

Es una conversión directa muy sencilla. Cada dígito hexadecimal se corresponde exactamente con un bloque de 4 bits binarios. Dado que $2^4 = 16$, agrupamos el número binario en bloques de 4 bits (tétradas) comenzando por la derecha. Si el último grupo a la izquierda no llega a 4 bits, se rellena con ceros a la izquierda.

Pasos del algoritmo:

  1. Agrupar desde la derecha: 111 | 0101 | 1110
  2. Rellenar con ceros el grupo izquierdo: 0111 | 0101 | 1110
  3. Convertir cada bloque a su equivalente hexadecimal:
    • 01112 = 7 en decimal → 716
    • 01012 = 5 en decimal → 516
    • 11102 = 14 en decimal → E16
Resultado: Uniendo los caracteres: $11101011110_2 = 75E_{16}$

4. Conversión de Hexadecimal a Binario (Ejemplo: $3B8_{16}$)

Sustituimos cada dígito hexadecimal directamente por su equivalente binario representado en un bloque estricto de 4 bits.

Pasos del algoritmo:

  • 31600112
  • B16 (11 en decimal) → 10112
  • 81610002
Resultado: Concatenando las tétradas (eliminando ceros a la izquierda del todo): $3B8_{16} = 1110111000_2$

5. Conversión de Binario a Octal (Ejemplo: $1011101_2$)

Cada dígito octal se corresponde exactamente con un bloque de 3 bits binarios (por ejemplo, el valor octal 78 equivale a 1112). Dado que $2^3 = 8$, agrupamos el número binario en bloques de 3 bits (tripletas) de derecha a izquierda, completando con ceros a la izquierda si fuera necesario.

Pasos del algoritmo:

  1. Agrupar desde la derecha: 1 | 011 | 101
  2. Rellenar el grupo izquierdo: 001 | 011 | 101
  3. Convertir cada bloque a octal:
    • 0012 = 18
    • 0112 = 38
    • 1012 = 58
Resultado: $1011101_2 = 135_8$

6. Conversión de Decimal a Hexadecimal (Ejemplo: $438_{10}$)

Se divide sucesivamente entre 16 anotando los restos. Si un resto es superior a 9, se reemplaza por su equivalente en letra (A=10, B=11, C=12, D=13, E=14, F=15). El resultado se lee de abajo hacia arriba.

NOTA: para pasar de decimal a hexadecimal es mucho más rápido y sencillo pasar previamente a binario y después a hexadecimal.

Pasos del algoritmo:

  • 438 / 16 = 27 → Resto: 6
  • 27 / 16 = 1   → Resto: 11 (→ letra B)
  • 1 / 16 = 0   → Resto: 1 (Último cociente)
Resultado: Leídos en orden inverso: $438_{10} = 1B6_{16}$

7. Conversión de Decimal a Octal (Ejemplo: $253_{10}$)

Se divide el número entre 8 de manera sucesiva y se toman los restos junto con el último cociente en orden inverso.

NOTA: para pasar de decimal a octal es mucho más rápido y sencillo pasar previamente a binario y después a octal.

Pasos del algoritmo:

  • 253 / 8 = 31 → Resto: 5
  • 31 / 8 = 3   → Resto: 7
  • 3 / 8 = 0     → Resto: 3 (Último cociente)
Resultado: Leídos de abajo hacia arriba: $253_{10} = 375_8$

8. Conversión de Hexadecimal a Decimal (Ejemplo: $2A5_{16}$)

Se multiplican las cifras por las potencias de base 16 según su posición, sustituyendo primero las letras por sus valores numéricos correspondientes.

NOTA: para pasar de hexadecimal a decimal  es mucho más rápido y sencillo pasar previamente a binario y después a decimal.

Pasos del algoritmo:

  • Posición 2: $2 \cdot 16^2 = 2 \cdot 256 = 512$
  • Posición 1: $\text{A} (10) \cdot 16^1 = 10 \cdot 16 = 160$
  • Posición 0: $5 \cdot 16^0 = 5 \cdot 1 = 5$

Suma de las potencias: $512 + 160 + 5 = 677$

Resultado: $2A5_{16} = 677_{10}$

9. Conversión de Octal a Decimal (Ejemplo: $472_8$)

Se aplica el Teorema Fundamental de la Numeración multiplicando cada dígito por la potencia de base 8 correspondiente a su posición.

NOTA: para pasar de octal a decimal  es mucho más rápido y sencillo pasar previamente a binario y después a decimal.

Pasos del algoritmo:

  • Posición 2: $4 \cdot 8^2 = 4 \cdot 64 = 256$
  • Posición 1: $7 \cdot 8^1 = 7 \cdot 8 = 56$
  • Posición 0: $2 \cdot 8^0 = 2 \cdot 1 = 2$

Suma de las potencias: $256 + 56 + 2 = 314$

Resultado: $472_8 = 314_{10}$

10. Conversión de Octal a Binario (Ejemplo: $631_8$)

Se sustituye cada dígito octal por su equivalente en binario utilizando un bloque estricto de 3 bits.

Pasos del algoritmo:

  • 681102
  • 380112
  • 180012
Resultado: Concatenando las tripletas: $631_8 = 110011001_2$

11. Conversión de Hexadecimal a Octal (Ejemplo: $1E4_{16}$)

La forma más rápida es utilizar el binario como puente intermedio: primero se convierte el hexadecimal a binario (bloques de 4 bits) y luego ese binario se reagrupa a octal (bloques de 3 bits).

Pasos del algoritmo:

  1. Paso 1 (Hexadecimal → Binario):
    • 10001 | E (14)1110 | 40100
    • Binario obtenido: 0001111001002
  2. Paso 2 (Reagrupar binario de 3 en 3 bits desde la derecha):
    • 000 | 111 | 100 | 100
  3. Paso 3 (Convertir cada bloque a octal):
    • 0002 = 08
    • 1112 = 78
    • 1002 = 48
    • 1002 = 48
Resultado: Uniendo las cifras (omitiendo el cero inicial): $1E4_{16} = 744_8$

12. Conversión de Octal a Hexadecimal (Ejemplo: $527_8$)

Al igual que el caso inverso, se pasa primero el número octal a binario (grupos de 3 bits) y posteriormente se reordena ese binario en tétradas (grupos de 4 bits).

Pasos del algoritmo:

  1. Paso 1 (Octal → Binario):
    • 5101 | 2010 | 7111
    • Binario obtenido: 1010101112
  2. Paso 2 (Reagrupar binario de 4 en 4 bits desde la derecha, rellenando con ceros a la izquierda):
    • 0001 | 0101 | 0111
  3. Paso 3 (Convertir cada tétrada a hexadecimal):
    • 00012 = 116
    • 01012 = 516
    • 01112 = 716
Resultado: $527_8 = 157_{16}$


Actividad práctica

Objetivo:

Realizar operaciones de conversión numérica entre diferentes bases utilizadas habitualmente en redes y sistemas informáticos.

Tareas:

  1. Convierte el número decimal 17010 a su equivalente en sistema binario (Base 2).
  2. Transforma el número binario 110110102 a su representación en sistema hexadecimal (Base 16).
  3. Calcula el valor decimal del número octal 3458.
  4. Completa la siguiente tabla:
    HEX BIN OCT DEC
    1001
    1110
    12
    815
    11110110110
    63535
Haz clic aquí para ver las soluciones y explicaciones

1. Convierte el número decimal 17010 a su equivalente en sistema binario (Base 2)

Dividiendo sucesivamente entre 2: 170 / 2 = 85 (resto 0), 85 / 2 = 42 (resto 1), 42 / 2 = 21 (resto 0), 21 / 2 = 10 (resto 1), 10 / 2 = 5 (resto 0), 5 / 2 = 2 (resto 1), 2 / 2 = 1 (resto 0), y 1 / 2 = 0 (resto 1). Tomando los restos en orden inverso, el resultado es 101010102.


2. Transforma el número binario 110110102 a su representación en sistema hexadecimal (Base 16)

Se divide el binario en bloques de 4 bits desde la derecha: 1101 y 1010. El bloque 1101 equivale a 13 en decimal, que en hexadecimal es la letra D. El bloque 1010 equivale a 10 en decimal, que es la letra A. Por tanto, el valor hexadecimal es DA16.


3. Calcula el valor decimal del número octal 3458

Se multiplica cada dígito por su potencia de 8 correspondiente:
(3 × 82) + (4 × 81) + (5 × 80) = (3 × 64) + (4 × 8) + (5 × 1) = 192 + 32 + 5 = 22910.


4. Completa la siguiente tabla:

HEX BIN OCT DEC
9 1001 11 9
E 1110 16 14
12 10010 22 18
32F 1100101111 1457 815
7B6 11110110110 3666 1974
675D 110011101011101 63535 26461

Preguntas de reflexión:

  1. ¿Por qué la arquitectura de los ordenadores modernos se basa fundamentalmente en el sistema binario (dos estados físicos) en lugar de utilizar el sistema decimal humano?
  2. ¿Cómo facilita el sistema hexadecimal la lectura y depuración de un volcado de memoria (memory dump) frente a la complejidad de leer cientos de ceros y unos seguidos?
  3. ¿Qué relación matemática exacta permite convertir directamente un número binario a hexadecimal agrupando los bits de 4 en 4?
  4. ¿En qué escenarios específicos de la administración de sistemas UNIX/Linux se sigue utilizando activamente el sistema octal para configurar permisos de ficheros?
  5. ¿Qué errores de desbordamiento (overflow) numérico pueden producirse cuando un sistema informático intenta almacenar un valor binario que excede el número de bits asignado?
  6. ¿Por qué los ingenieros de sistemas prefieren utilizar el sistema hexadecimal en lugar de largas cadenas binarias para representar direcciones de memoria o tramas de red?
Haz clic aquí para ver las respuestas explicadas

1. ¿Por qué se utiliza el sistema binario?

Por fiabilidad física en los componentes electrónicos (transistores). Distinguir entre solo dos estados eléctricos (alto/bajo voltaje, paso/bloqueo de corriente) es muy robusto frente al ruido electromagnético. Crear componentes capaces de medir y diferenciar 10 niveles de voltaje distintos con precisión requeriría circuitos extremadamente complejos, costosos y propensos a errores.


2. Facilitación en volcados de memoria (Memory Dumps)

Representar los bytes en hexadecimal reduce en un 75% la longitud de los datos en pantalla (cada grupo de 4 bits pasa a ser un solo carácter). Esto evita la sobrecarga visual, simplifica la alineación en columnas y permite a los técnicos identificar patrones, cabeceras de archivos o punteros de memoria a simple vista.


3. Relación matemática entre Binario y Hexadecimal

La relación se debe a que la base 16 es una potencia exacta de la base 2 ($2^4 = 16$). Debido a esta equivalencia matemática, exactamente $2^4 = 16$ combinaciones distintas se pueden formar con 4 bits (de 0000 a 1111), lo que corresponde exactamente a los 16 símbolos del sistema hexadecimal (del 0 a la F).


4. Uso del octal en sistemas UNIX/Linux

Se utiliza activamente en la gestión de permisos del sistema de archivos mediante el comando chmod (modo numérico). Cada uno de los tres dígitos octales asigna los permisos de lectura (4), escritura (2) y ejecución (1) para los tres roles del sistema: Propietario (User), Grupo (Group) y Otros (Others). Por ejemplo, chmod 755 archivo.


5. Desbordamiento numérico (Overflow)

Ocurre cuando el resultado de una operación matemática supera el valor máximo que puede ser representado con el número finito de bits asignados al tipo de dato (por ejemplo, intentar almacenar 256 en un registro de 8 bits no signado). Al no caber el bit más significativo (bit de acarreo), este se pierde o altera el bit de signo, produciendo valores erróneos, truncados o incluso volviéndose negativos involuntariamente.


6. Ventajas del Hexadecimal en direcciones y redes

Además de compactar la información, la conversión mental entre hexadecimal y binario es inmediata (al ser en bloques rígidos de 4 bits), algo que no ocurre al convertir de binario a decimal. Esto lo hace idóneo para representar direcciones MAC (48 bits en 12 dígitos Hex), IPv6 (128 bits en 8 bloques de 4 dígitos Hex) o códigos de color HTML/RGB.

Recursos adicionales: