Volver a la lista

Binario y pensamiento computacional

Comprenda por qué las computadoras utilizan solo 0 y 1, el significado de los bits y los bytes, y la representación binaria de texto y colores.

Principiante
|
10min
|
Verificado (2026-07)
sistema binariobitbytenúmero binariorepresentación informática
Progreso0/23 (0%)

Sistema binario y pensamiento computacional

Al finalizar este tema

Comprenderá por qué las computadoras utilizan el sistema binario, podrá realizar conversiones entre los sistemas decimal y binario, y podrá explicar cómo se representan internamente el texto y los colores.


¿Por qué las computadoras solo usan 0 y 1?

El componente fundamental de una computadora, el transistor, solo tiene dos estados: corriente fluyendo (1) o corriente sin fluir (0). Miles de millones de transistores se agrupan para formar la CPU, y cada uno representa un 0 o un 1.

Los humanos usamos el sistema decimal porque tenemos diez dedos. Las computadoras usan el sistema binario porque tienen dos estados. Es así de simple.


Decimal vs. Binario

En el sistema decimal, 254 es:

text
2 × 10² + 5 × 10¹ + 4 × 10⁰
= 200   + 50     + 4
= 254

En el sistema binario, 11111110 es:

text
1×2⁷ + 1×2⁶ + 1×2⁵ + 1×2⁴ + 1×2³ + 1×2² + 1×2¹ + 0×2⁰
= 128 + 64   + 32   + 16   + 8    + 4    + 2    + 0
= 254

Funciona bajo el mismo principio. En lugar de multiplicar por potencias de 10 en cada posición, se multiplica por potencias de 2.

Conversión con Python

python
# Decimal → binario
print(bin(254)) # '0b11111110'
print(bin(42)) # '0b101010'
# Binario → decimal
print(int('11111110', 2)) # 254
print(int('101010', 2)) # 42
# Hexadecimal (forma compacta del binario)
print(hex(254)) # '0xfe'
print(int('fe', 16)) # 254

0b es el prefijo para el sistema binario y 0x para el sistema hexadecimal.


Bits y bytes

  • Bit: 0 o 1, la unidad mínima de información
  • Byte: 8 bits = 1 byte
text
1 bit   → 2 valores     (0 o 1)
2 bits  → 4 valores     (00, 01, 10, 11)
3 bits  → 8 valores     (000 ~ 111)
8 bits  → 256 valores   (00000000 ~ 11111111)

El número de valores que se pueden representar con n bits es 2ⁿ.

UnidadTamañoUso aproximado
1 byte8 bits1 carácter (alfabeto latino)
1 KB1.024 bytesArchivo de texto corto
1 MB1.024 KB1 foto de alta resolución
1 GB1.024 MB1 película (SD)
1 TB1.024 GBDisco duro de gran capacidad

Representación binaria del texto: ASCII y Unicode

Las computadoras no tienen el concepto de "carácter". Todos los caracteres se asocian a números.

ASCII: 128 caracteres (alfabeto latino)

python
# Carácter → código ASCII
print(ord('A')) # 65
print(ord('a')) # 97
print(ord('0')) # 48
print(ord(' ')) # 32
# Código ASCII → carácter
print(chr(65)) # 'A'
print(chr(97)) # 'a'
print(chr(48)) # '0'
text
'A' = 65 = 01000001 (binario)
'B' = 66 = 01000010
'a' = 97 = 01100001
'0' = 48 = 00110000

ASCII utiliza 7 bits para representar 128 caracteres: letras mayúsculas y minúsculas del alfabeto inglés, números y símbolos especiales. Sin embargo, no puede representar el coreano, el japonés ni el chino.

Unicode — Caracteres de todo el mundo

python
print(ord('ñ')) # 241
print(ord('á')) # 225
print(hex(ord('ñ'))) # '0xf1'
print(chr(241)) # 'ñ'
print(chr(127829)) # '🍕' (emoji de pizza)
# Codificación UTF-8 — comprobar el número de bytes
print('A'.encode('utf-8')) # b'A' — 1 byte
print('ñ'.encode('utf-8')) # b'\xc3\xb1' — 2 bytes
print('🍕'.encode('utf-8')) # b'\xf0\x9f\x8d\x95' — 4 bytes

Unicode incluye más de 140.000 caracteres. UTF-8 es un método de codificación de Unicode que utiliza 1 byte para el inglés, 3 bytes para el coreano y 4 bytes para los emojis.


Representación binaria del color: RGB

Todos los colores de la pantalla son una combinación de tres valores: rojo (R), verde (G) y azul (B). Cada valor tiene un rango de 0~255 (1 byte).

python
# Valores RGB → código de color hexadecimal
r, g, b = 255, 128, 0
hex_color = f"#{r:02x}{g:02x}{b:02x}"
print(hex_color) # #ff8000 (orange)
# Hexadecimal → RGB
hex_str = "ff8000"
r = int(hex_str[0:2], 16) # 255
g = int(hex_str[2:4], 16) # 128
b = int(hex_str[4:6], 16) # 0
ColorRGBHexadecimal
Rojo25500#ff0000
Verde02550#00ff00
Azul00255#0000ff
Blanco255255255#ffffff
Negro000#000000

Al escribir #ff8000 en CSS, esto representa R=255, G=128, B=0 en formato hexadecimal. Con 8 bits por canal × 3 canales = 24 bits, se pueden representar aproximadamente 16,77 millones de colores.


¿Cómo se representan los números negativos? — Complemento a dos

El sistema binario solo utiliza 0 y 1; ¿cómo se representan los números negativos? Las computadoras utilizan el complemento a dos (Two's Complement).

Tomando como referencia 8 bits, veamos 5 y -5:

text
5 = 00000101
-5 = 11111011

Cómo obtener el complemento a dos: invierta todos los bits (0→1, 1→0) y luego sume 1.

text
5    = 00000101
invertir = 11111010
+1       = 11111011  →  este es -5
python
# Comprobación en Python
print(bin(5)) # 0b101
print(bin(-5 & 0xff)) # 0b11111011 (con 8 bits)
# Ventaja del complemento a dos: el mismo circuito de suma permite restar
# 5 + (-5) = 00000101 + 11111011 = 100000000
# Se descarta el noveno bit → 00000000 = 0 (correcto)

Gracias a este método, la CPU puede realizar restas utilizando únicamente el circuito de suma, sin necesidad de un circuito de resta independiente.

Rango representable con complemento a dos de 8 bits: -128 ~ +127 (un total de 256 valores).


Operaciones bit a bit: manipulación directa de 0 y 1

En programación, existen operaciones que permiten manipular los bits directamente.

python
a = 0b1100 # 12
b = 0b1010 # 10
# AND — 1 solo si ambos bits son 1
print(bin(a & b)) # 0b1000 (8)
# OR — 1 si al menos uno de los bits es 1
print(bin(a | b)) # 0b1110 (14)
# XOR — 1 si los bits son diferentes
print(bin(a ^ b)) # 0b0110 (6)
# NOT — invierte los bits
print(bin(~a & 0xf)) # 0b0011 (3)
# Shift — desplaza los bits a la izquierda o a la derecha
print(a << 1) # 24 (12 × 2)
print(a >> 1) # 6 (12 ÷ 2)

El desplazamiento a la izquierda (<<) equivale a ×2, y el desplazamiento a la derecha (>>) equivale a ÷2. Debido a que son más rápidos que la multiplicación/división, se utilizan en código de bajo nivel donde el rendimiento es crucial.

Práctica — Gestión de permisos mediante bitmasks

Los permisos de archivos de Linux (chmod 755) funcionan mediante operaciones de bits.

python
READ = 0b100 # 4
WRITE = 0b010 # 2
EXECUTE = 0b001 # 1
# Configurar permisos (combinarlos con OR)
user_perm = READ | WRITE | EXECUTE # 0b111 = 7
group_perm = READ | EXECUTE # 0b101 = 5
other_perm = READ | EXECUTE # 0b101 = 5
print(f"chmod {user_perm}{group_perm}{other_perm}") # chmod 755
# Comprobar permisos (evaluarlos con AND)
has_write = bool(user_perm & WRITE) # True
has_write_g = bool(group_perm & WRITE) # False

Significado de chmod 755: propietario (7=rwx), grupo (5=r-x), otros (5=r-x). Cada número es la representación decimal de 3 bits.


Resumen clave

ConceptoResumen
Sistema binarioRepresenta todos los números con 0 y 1. El lenguaje fundamental de las computadoras.
BitLa unidad mínima de información (0 o 1).
Byte8 bits. Rango de valores de 0 a 255.
ASCIIAsigna números a caracteres del alfabeto inglés (7 bits, 128 caracteres).
UnicodeCaracteres de todo el mundo (más de 140.000). Se almacena mediante UTF-8.
RGBRepresenta colores mediante tres valores (0~255). 24 bits = 16,77 millones de colores.

Al programar, es poco común realizar cálculos binarios directamente. Sin embargo, comprender que "las computadoras representan todo como números, y esos números se expresan con 0 y 1" permite asimilar naturalmente conceptos como el tamaño de archivo, errores de codificación, códigos de color y bitmasks. Entender el complemento a dos ayuda a comprender por qué ocurre el desbordamiento de enteros (integer overflow), y comprender las operaciones a nivel de bits explica por qué el sistema de permisos (chmod) utiliza 777.

💬 Preguntas y comentarios

0 comentarios

Puedes publicar sin iniciar sesión. Los comentarios de invitados no pueden editarse ni eliminarse después.

0/2000

Cargando...