Sistemas de numeración: cómo se representa la información¶
Por qué existen varias bases¶
Un ordenador solo distingue dos estados: hay corriente o no la hay, hay carga o no la hay. Por eso toda la información dentro de la máquina —números, texto, imágenes, instrucciones— se acaba representando con ceros y unos.
El problema es que el binario es incomodísimo de leer para las personas. Una dirección de memoria escrita en binario ocupa 32 símbolos. Por eso se usan dos «taquigrafías»:
- Hexadecimal (base 16): cada dígito resume 4 bits.
- Octal (base 8): cada dígito resume 3 bits.
Idea clave: el ordenador siempre trabaja en binario. El hexadecimal y el octal no son otra forma de guardar los datos, son otra forma de escribirlos para que un humano pueda leerlos.
| Sistema | Base | Símbolos |
|---|---|---|
| Binario | 2 | 0 1 |
| Octal | 8 | 0–7 |
| Decimal | 10 | 0–9 |
| Hexadecimal | 16 | 0–9 y A–F (A=10 … F=15) |
En hexadecimal, A–F son dígitos, no letras. Y en octal no existen el 8 ni el 9.
Notación: como 101 significa cosas distintas en cada base, hay que indicarla: 1011₂ o 0b1011, 755₈ o 0o755, 2F₁₆ o 0x2F. En Java escribirás 0xFF.
2. La tabla que hay que saberse¶
Con estas 16 filas se hacen casi todas las conversiones que necesitaréis:
| Dec | Binario | Hex | Dec | Binario | Hex | |
|---|---|---|---|---|---|---|
| 0 | 0000 | 0 | 8 | 1000 | 8 | |
| 1 | 0001 | 1 | 9 | 1001 | 9 | |
| 2 | 0010 | 2 | 10 | 1010 | A | |
| 3 | 0011 | 3 | 11 | 1011 | B | |
| 4 | 0100 | 4 | 12 | 1100 | C | |
| 5 | 0101 | 5 | 13 | 1101 | D | |
| 6 | 0110 | 6 | 14 | 1110 | E | |
| 7 | 0111 | 7 | 15 | 1111 | F |
3. Las tres conversiones que hay que saber hacer¶
a) Binario → decimal. Escribe los pesos encima y suma los que tengan un 1 debajo.
1 0 0 1 1 1 0 0
128 64 32 16 8 4 2 1
128 + 16 + 8 + 4 = 156
b) Decimal → binario. Divide entre 2 y lee los restos de abajo arriba.
156 ÷ 2 = 78 r 0 Resultado: 10011100₂
78 ÷ 2 = 39 r 0 Comprobación: 128+16+8+4 = 156 ✔
39 ÷ 2 = 19 r 1
19 ÷ 2 = 9 r 1
9 ÷ 2 = 4 r 1
4 ÷ 2 = 2 r 0
2 ÷ 2 = 1 r 0
1 ÷ 2 = 0 r 1
c) Binario ↔ hexadecimal: el atajo. Como 1 dígito hex = 4 bits, se agrupa de 4 en 4 desde la derecha y se traduce cada grupo con la tabla. No hace falta pasar por decimal.
10011100₂ → 1001 1100 → 9 C → 9C₁₆
0x3F → 3 F → 0011 1111 → 00111111₂
Con el octal es igual pero de 3 en 3 (10011100 → 010 011 100 → 234₈).
Comprueba siempre el resultado volviendo a decimal. Son dos líneas y detecta cualquier error.
4. Dónde aparece esto de verdad¶
Este apartado no es un ejercicio de matemáticas: es lo que te vas a encontrar en la consola y en el código durante todo el curso.
| Dónde | Base | Ejemplo |
|---|---|---|
| Permisos de ficheros en Linux | Octal | chmod 750 → rwx r-x --- (3 bits por grupo = 1 dígito octal) |
| Colores en CSS y diseño | Hex | #FF8000 = R 255, G 128, B 0 |
| Direcciones MAC | Hex | A4:5E:60:C2:1B:0F |
| Direcciones IPv6 | Hex | 2001:0db8::1 |
| Direcciones de memoria y errores | Hex | 0x7FFD3A2C |
| Máscaras de red y subredes | Binario | 255.255.255.0 = 24 unos seguidos |
| Códigos de carácter | Hex | 'A' = 65 = 0x41 |
Dos consecuencias prácticas que conviene retener:
- 1 byte = 8 bits = exactamente 2 dígitos hexadecimales. Por eso todo lo que se mide en bytes se escribe en hex.
- Con n bits hay 2ⁿ valores posibles: 8 bits → 0–255 (de ahí los 255 de una IP), 16 bits → 0–65 535 (de ahí los 65 535 puertos TCP).