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:
- Binario (base 2): dígitos 0 y 1, llamados bits. Pesos 1, 2, 4, 8, 16, 32, 64, 128...
- Octal (base 8): dígitos 0 a 7. Cada dígito octal equivale a 3 bits.
- Hexadecimal (base 16): dígitos 0 a 9 y A a F (A = 10, B = 11, C = 12, D = 13, E = 14, F = 15). Cada dígito hexadecimal equivale a 4 bits.
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.
- 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.
- Leyendo los residuos de abajo hacia arriba: 156 = 100111002. Comprobación: 128 + 16 + 8 + 4 = 156.
- Octal: 10 011 100 → 010 011 100 → 2 3 4. Resultado 2348 (2·64 + 3·8 + 4 = 156).
- 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:
- Escribe el número positivo con todos sus bits.
- Invierte cada bit (esto es el complemento a 1).
- 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).
- 45 = 00101101. Al invertir: 11010010. Al sumar 1: 11010011 = −45.
- Comprobación con pesos: −128 + 64 + 16 + 2 + 1 = −45.
- Ahora 25 + (−12). 25 = 00011001; 12 = 00001100, invertido 11110011, más 1: 11110100 = −12.
- Suma: 00011001 + 11110100 = 1 00001101. El acarreo que sale del bit 8 se descarta.
- Resultado: 00001101 = 13. Correcto.
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.
- Binario a Gray: el bit más significativo se copia; cada bit siguiente es la XOR del bit binario correspondiente con el bit binario a su izquierda. En fórmula, g = b ⊕ (b desplazado un lugar a la derecha).
- Gray a binario: el bit más significativo se copia; cada bit binario siguiente es la XOR del bit binario recién obtenido con el bit Gray de esa posición.
| Decimal | Binario | Gray | Decimal | Binario | Gray |
|---|---|---|---|---|---|
| 0 | 0000 | 0000 | 8 | 1000 | 1100 |
| 1 | 0001 | 0001 | 9 | 1001 | 1101 |
| 2 | 0010 | 0011 | 10 | 1010 | 1111 |
| 3 | 0011 | 0010 | 11 | 1011 | 1110 |
| 4 | 0100 | 0110 | 12 | 1100 | 1010 |
| 5 | 0101 | 0111 | 13 | 1101 | 1011 |
| 6 | 0110 | 0101 | 14 | 1110 | 1001 |
| 7 | 0111 | 0100 | 15 | 1111 | 1000 |
Ejemplo 3: binario 1011 a Gray y de regreso.
- Copia el primer bit: 1.
- 1 ⊕ 0 = 1; 0 ⊕ 1 = 1; 1 ⊕ 1 = 0. Gray = 1110.
- 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
- Agrupar bits para octal o hexadecimal empezando por la izquierda. Siempre se agrupa desde el bit menos significativo.
- Olvidar el "+1" del complemento a 2. Solo invertir da el complemento a 1, que tiene dos ceros y otro rango.
- Interpretar 11010011 como 211 cuando el registro es con signo. El mismo patrón de bits vale 211 sin signo o −45 con signo: depende de la convención.
- Confundir BCD con binario. El 25 en BCD es 0010 0101, mientras que en binario es 11001.
- Convertir Gray a binario haciendo la XOR con el bit Gray vecino en lugar del bit binario recién calculado.
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.
- Coloca cuatro entradas como bits b3 a b0 y conecta un display o cuatro LEDs para ver el valor.
- Agrega tres compuertas XOR: g2 = b3 ⊕ b2, g1 = b2 ⊕ b1, g0 = b1 ⊕ b0, y conecta b3 directo a g3.
- Cambia las entradas de 0000 a 1111 y observa en las salidas que entre un valor y el siguiente cambia un solo bit Gray.
- Genera la tabla de verdad del circuito y compárala con la tabla de este artículo.
Ejercicios
- Convierte 110101102 a hexadecimal y a decimal.
Respuesta
1101 0110 = D616 = 13·16 + 6 = 214.
- Convierte 200 a binario y a hexadecimal.
Respuesta
200 = 128 + 64 + 8 = 110010002 = C816.
- 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.
- 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.