bitGateLab Digital · Aprende Abrir el simulador

Aprende › Tema 6

Sistemas numéricos: binario, octal, hexadecimal y códigos

Lectura de 7 min · Equipo bitGateLab

Un circuito digital solo entiende ceros y unos, pero tú necesitas representar cantidades, signos, dígitos de un display y posiciones de un encoder. Aquí vas a aprender cómo funcionan los sistemas posicionales, a convertir entre decimal, binario, octal y hexadecimal, a representar números negativos con complemento a 2 y a usar dos códigos muy comunes en electrónica: BCD y Gray.

Sistemas posicionales

En un sistema posicional de base b, cada dígito se multiplica por una potencia de b según su posición, contando desde 0 a la derecha. El decimal 347 vale 3·102 + 4·101 + 7·100. Lo mismo pasa con las otras bases:

Para evitar confusiones se indica la base con un subíndice (10102, 178, 3F16) o con un prefijo como 0b o 0x.

Conversiones entre bases

De cualquier base a decimal

Multiplica cada dígito por su peso y suma. Por ejemplo, 2F316 = 2·256 + 15·16 + 3·1 = 512 + 240 + 3 = 755.

De decimal a binario

Divide entre 2 repetidamente y anota los residuos; el número binario se lee de abajo hacia arriba (el último residuo es el bit más significativo). Otra forma es restar la mayor potencia de 2 que quepa, una y otra vez.

Entre binario, octal y hexadecimal

Como 8 = 23 y 16 = 24, no hace falta pasar por decimal: agrupa los bits de 3 en 3 (octal) o de 4 en 4 (hexadecimal) empezando por la derecha, y completa con ceros a la izquierda si es necesario.

Ejemplo 1: convertir 156 a binario, octal y hexadecimal.

  1. Divisiones sucesivas: 156/2 = 78 r 0; 78/2 = 39 r 0; 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.
  2. Leyendo los residuos de abajo hacia arriba: 156 = 100111002. Comprobación: 128 + 16 + 8 + 4 = 156.
  3. Octal: 10 011 100 → 010 011 100 → 2 3 4. Resultado 2348 (2·64 + 3·8 + 4 = 156).
  4. Hexadecimal: 1001 1100 → 9 C. Resultado 9C16 (9·16 + 12 = 156).

Números negativos: complemento a 2

Un registro de n bits no tiene un lugar para el signo "menos", así que se usa una convención. La que usan prácticamente todos los procesadores es el complemento a 2: el bit más significativo tiene peso negativo, −2n−1, y los demás conservan su peso positivo. Con 8 bits el rango va de −128 a +127; con 4 bits, de −8 a +7.

Para obtener el negativo de un número:

  1. Escribe el número positivo con todos sus bits.
  2. Invierte cada bit (esto es el complemento a 1).
  3. Suma 1.

La ventaja es enorme: la suma y la resta se hacen con el mismo circuito sumador, sin lógica especial para el signo. Hay un solo cero (00000000) y el bit más significativo indica directamente si el número es negativo.

Ejemplo 2: representar −45 en 8 bits y calcular 25 + (−12).

  1. 45 = 00101101. Al invertir: 11010010. Al sumar 1: 11010011 = −45.
  2. Comprobación con pesos: −128 + 64 + 16 + 2 + 1 = −45.
  3. Ahora 25 + (−12). 25 = 00011001; 12 = 00001100, invertido 11110011, más 1: 11110100 = −12.
  4. Suma: 00011001 + 11110100 = 1 00001101. El acarreo que sale del bit 8 se descarta.
  5. Resultado: 00001101 = 13. Correcto.
Desbordamiento: si sumas dos números del mismo signo y el resultado tiene el signo contrario, el resultado no cabe en los bits disponibles. Por ejemplo, en 8 bits 100 + 50 = 01100100 + 00110010 = 10010110, que en complemento a 2 vale −106 en lugar de 150. Sumar números de signo distinto nunca desborda.

Código BCD

En el BCD (decimal codificado en binario, versión 8421) cada dígito decimal se representa por separado con 4 bits. Así, 395 se escribe 0011 1001 0101. No es lo mismo que convertir 395 a binario (1100010112): el BCD usa más bits, pero cada grupo se manda directamente a un decodificador de display de 7 segmentos, sin divisiones. Los códigos 1010 a 1111 no son válidos en BCD; en un diseño, esas combinaciones suelen tratarse como condiciones "no importa" en los mapas de Karnaugh.

Código Gray

En el código Gray, entre un valor y el siguiente cambia un solo bit. En binario normal, pasar de 7 (0111) a 8 (1000) cambia los cuatro bits a la vez; si un sensor lee justo durante la transición, puede ver por un instante cualquier valor intermedio. Con Gray ese error no ocurre, por eso se usa en encoders de posición, en contadores que cruzan entre relojes distintos y en los encabezados de los mapas de Karnaugh.

DecimalBinarioGrayDecimalBinarioGray
000000000810001100
100010001910011101
2001000111010101111
3001100101110111110
4010001101211001010
5010101111311011011
6011001011411101001
7011101001511111000

Ejemplo 3: binario 1011 a Gray y de regreso.

  1. Copia el primer bit: 1.
  2. 1 ⊕ 0 = 1; 0 ⊕ 1 = 1; 1 ⊕ 1 = 0. Gray = 1110.
  3. De regreso: copia el primer bit, b3 = 1. Luego b2 = 1 ⊕ 1 = 0, b1 = 0 ⊕ 1 = 1, b0 = 1 ⊕ 0 = 1. Binario = 1011.

En la tabla, el 11 decimal aparece con Gray 1110: coincide.

Errores comunes

Pruébalo en el simulador

Puedes ver estas representaciones "en vivo" con unas cuantas entradas y salidas, y comprobar la conversión a Gray con compuertas XOR.

  1. Coloca cuatro entradas como bits b3 a b0 y conecta un display o cuatro LEDs para ver el valor.
  2. Agrega tres compuertas XOR: g2 = b3 ⊕ b2, g1 = b2 ⊕ b1, g0 = b1 ⊕ b0, y conecta b3 directo a g3.
  3. Cambia las entradas de 0000 a 1111 y observa en las salidas que entre un valor y el siguiente cambia un solo bit Gray.
  4. Genera la tabla de verdad del circuito y compárala con la tabla de este artículo.

Ejercicios

  1. Convierte 110101102 a hexadecimal y a decimal.
    Respuesta

    1101 0110 = D616 = 13·16 + 6 = 214.

  2. Convierte 200 a binario y a hexadecimal.
    Respuesta

    200 = 128 + 64 + 8 = 110010002 = C816.

  3. Representa −100 en complemento a 2 con 8 bits.
    Respuesta

    100 = 01100100; invertido 10011011; más 1: 10011100. Comprobación: −128 + 16 + 8 + 4 = −100.

  4. Convierte el decimal 6 a código Gray de 4 bits y el BCD 0111 0010 a decimal.
    Respuesta

    6 = 0110; Gray: 0, 0 ⊕ 1 = 1, 1 ⊕ 1 = 0, 1 ⊕ 0 = 1 → 0101. El BCD 0111 0010 es 72.

Para ver cómo un circuito suma y resta estos números, sigue con sumadores binarios.