>_cibercódice
> archivo / Fundamentos de informática

Representación de datos: bits, bytes y memoria

Debajo de cualquier archivo de texto, imagen, paquete de red o programa en ejecución solo existe una abstracción física: secuencias de bits almacenadas en celdas de memoria o transmitidas como señales eléctricas y ópticas.

Entender cómo se agrupan esos bits en bytes y cómo se representan en hexadecimal elimina gran parte del misterio al depurar programas, analizar tráfico de red o leer direcciones de memoria.

§ Del bit al byte

Un bit (binary digit) es la unidad mínima de información y solo puede tomar dos estados: 0 o 1. Como un bit aislado permite representar muy poco, la arquitectura moderna organiza la memoria en bloques direccionables de 8 bits, llamados bytes (u octetos).

Con $8\text{ bits}$ podemos formar $2^8 = 256$ combinaciones distintas:

  • Como entero sin signo (uint8): valores desde 0 hasta 255.
  • Como entero con signo en complemento a dos (int8): valores desde -128 hasta 127.
  • Como carácter ASCII / UTF-8 de un byte: letras, dígitos y símbolos de control.

§ Por qué usamos hexadecimal (`0x`)

Leer o escribir cadenas de 32 o 64 bits en binario resulta propenso a errores humanos. El sistema hexadecimal (base 16, dígitos 0-9 y A-F) encaja de forma exacta con el binario porque cada dígito hexadecimal representa exactamente 4 bits (un nibble):

[esquema]Equivalencia directa entre un byte (8 bits) y dos dígitos hexadecimales
Equivalencia directa entre un byte (8 bits) y dos dígitos hexadecimales
Binario (4 bits) Decimal Hexadecimal Binario (4 bits) Decimal Hexadecimal
0000 0 0x0 1000 8 0x8
0001 1 0x1 1001 9 0x9
0100 4 0x4 1010 10 0xA
0111 7 0x7 1111 15 0xF
[tip] Regla visual rápida

Siempre que veas dos caracteres hexadecimales juntos (como ff, 7f o 0a), estás viendo exactamente 1 byte (8 bits). Por eso una dirección MAC como 00:1a:2b:3c:4d:5e ocupa 6 bytes (48 bits).

§ Inspeccionar los bytes reales de un archivo

En cualquier sistema tipo Unix puedes observar los bytes exactos que componen un archivo utilizando xxd o hexdump -C:

>_ Volcado hexadecimal de un archivo de texto
printf "Hola\n" > saludo.txt
hexdump -C saludo.txt
00000000  48 6f 6c 61 0a                                    |Hola.|
00000005

Observa qué ocurre byte a byte:

  1. 48 es el código ASCII hexadecimal de 'H' ($72$ en decimal).
  2. 6f, 6c, 61 corresponden a 'o', 'l', 'a'.
  3. 0a ($10$ en decimal) es el carácter de salto de línea \n (Line Feed).
[autoevaluación]Verifica tu comprensión

Si un campo de un protocolo de red tiene una longitud de 16 bits, ¿cuántos bytes ocupa y cuántos dígitos hexadecimales se necesitan para representarlo?

[checklist]Criterios de comprensión0 / 3 completados

↑ ↓ recorrer · enter abrir · esc cerrar