Aprenda › Tema 6
Sistemas de numeração: binário, octal, hexadecimal e códigos
Leitura de 7 min · Equipe bitGateLab
Um circuito digital só entende zeros e uns, mas você precisa representar quantidades, sinais, dígitos de um display e posições de um encoder. Aqui você vai aprender como funcionam os sistemas posicionais, a converter entre decimal, binário, octal e hexadecimal, a representar números negativos com complemento de 2 e a usar dois códigos muito comuns em eletrônica: BCD e Gray.
Sistemas posicionais
Em um sistema posicional de base b, cada dígito é multiplicado por uma potência de b conforme a sua posição, contando a partir de 0 à direita. O decimal 347 vale 3·102 + 4·101 + 7·100. O mesmo acontece com as outras bases:
- Binário (base 2): dígitos 0 e 1, chamados de bits. Pesos 1, 2, 4, 8, 16, 32, 64, 128...
- Octal (base 8): dígitos de 0 a 7. Cada dígito octal equivale a 3 bits.
- Hexadecimal (base 16): dígitos de 0 a 9 e de 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 confusões, indica-se a base com um índice subscrito (10102, 178, 3F16) ou com um prefixo como 0b ou 0x.
Conversões entre bases
De qualquer base para decimal
Multiplique cada dígito pelo seu peso e some. Por exemplo, 2F316 = 2·256 + 15·16 + 3·1 = 512 + 240 + 3 = 755.
De decimal para binário
Divida por 2 repetidamente e anote os restos; o número binário é lido de baixo para cima (o último resto é o bit mais significativo). Outra forma é subtrair a maior potência de 2 que couber, repetidas vezes.
Entre binário, octal e hexadecimal
Como 8 = 23 e 16 = 24, não é preciso passar pelo decimal: agrupe os bits de 3 em 3 (octal) ou de 4 em 4 (hexadecimal) começando pela direita, e complete com zeros à esquerda se necessário.
Exemplo 1: converter 156 para binário, octal e hexadecimal.
- Divisões sucessivas: 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.
- Lendo os restos de baixo para cima: 156 = 100111002. Verificação: 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 de 2
Um registrador de n bits não tem um lugar para o sinal de "menos", então se usa uma convenção. A que praticamente todos os processadores usam é o complemento de 2: o bit mais significativo tem peso negativo, −2n−1, e os demais mantêm o seu peso positivo. Com 8 bits a faixa vai de −128 a +127; com 4 bits, de −8 a +7.
Para obter o negativo de um número:
- Escreva o número positivo com todos os seus bits.
- Inverta cada bit (isso é o complemento de 1).
- Some 1.
A vantagem é enorme: a soma e a subtração são feitas com o mesmo circuito somador, sem lógica especial para o sinal. Há um único zero (00000000) e o bit mais significativo indica diretamente se o número é negativo.
Exemplo 2: representar −45 em 8 bits e calcular 25 + (−12).
- 45 = 00101101. Ao inverter: 11010010. Ao somar 1: 11010011 = −45.
- Verificação com os pesos: −128 + 64 + 16 + 2 + 1 = −45.
- Agora 25 + (−12). 25 = 00011001; 12 = 00001100, invertido 11110011, mais 1: 11110100 = −12.
- Soma: 00011001 + 11110100 = 1 00001101. O carry que sai do bit 8 é descartado.
- Resultado: 00001101 = 13. Correto.
Código BCD
No BCD (decimal codificado em binário, versão 8421) cada dígito decimal é representado separadamente com 4 bits. Assim, 395 se escreve 0011 1001 0101. Não é o mesmo que converter 395 para binário (1100010112): o BCD usa mais bits, mas cada grupo é enviado diretamente a um decodificador de display de 7 segmentos, sem divisões. Os códigos 1010 a 1111 não são válidos em BCD; em um projeto, essas combinações costumam ser tratadas como condições irrelevantes nos mapas de Karnaugh.
Código Gray
No código Gray, entre um valor e o seguinte muda um único bit. No binário normal, passar de 7 (0111) para 8 (1000) muda os quatro bits de uma vez; se um sensor lê exatamente durante a transição, pode ver por um instante qualquer valor intermediário. Com o Gray esse erro não ocorre; por isso ele é usado em encoders de posição, em contadores que cruzam entre clocks diferentes e nos cabeçalhos dos mapas de Karnaugh.
- Binário para Gray: o bit mais significativo é copiado; cada bit seguinte é a XOR do bit binário correspondente com o bit binário à sua esquerda. Em fórmula, g = b ⊕ (b deslocado uma posição para a direita).
- Gray para binário: o bit mais significativo é copiado; cada bit binário seguinte é a XOR do bit binário recém-obtido com o bit Gray daquela posição.
| Decimal | Binário | Gray | Decimal | Binário | 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 |
Exemplo 3: binário 1011 para Gray e de volta.
- Copie o primeiro bit: 1.
- 1 ⊕ 0 = 1; 0 ⊕ 1 = 1; 1 ⊕ 1 = 0. Gray = 1110.
- De volta: copie o primeiro bit, b3 = 1. Em seguida, b2 = 1 ⊕ 1 = 0, b1 = 0 ⊕ 1 = 1, b0 = 1 ⊕ 0 = 1. Binário = 1011.
Na tabela, o 11 decimal aparece com Gray 1110: confere.
Erros comuns
- Agrupar bits para octal ou hexadecimal começando pela esquerda. Sempre se agrupa a partir do bit menos significativo.
- Esquecer o "+1" do complemento de 2. Apenas inverter dá o complemento de 1, que tem dois zeros e outra faixa.
- Interpretar 11010011 como 211 quando o registrador é com sinal. O mesmo padrão de bits vale 211 sem sinal ou −45 com sinal: depende da convenção.
- Confundir BCD com binário. O 25 em BCD é 0010 0101, enquanto em binário é 11001.
- Converter Gray para binário fazendo a XOR com o bit Gray vizinho em vez do bit binário recém-calculado.
Experimente no simulador
Você pode ver essas representações "ao vivo" com algumas entradas e saídas, e comprovar a conversão para Gray com portas XOR.
- Coloque quatro entradas como bits b3 a b0 e conecte um display ou quatro LEDs para ver o valor.
- Acrescente três portas XOR: g2 = b3 ⊕ b2, g1 = b2 ⊕ b1, g0 = b1 ⊕ b0, e conecte b3 diretamente a g3.
- Mude as entradas de 0000 a 1111 e observe nas saídas que, entre um valor e o seguinte, muda um único bit Gray.
- Gere a tabela-verdade do circuito e compare-a com a tabela deste artigo.
Exercícios
- Converta 110101102 para hexadecimal e para decimal.
Resposta
1101 0110 = D616 = 13·16 + 6 = 214.
- Converta 200 para binário e para hexadecimal.
Resposta
200 = 128 + 64 + 8 = 110010002 = C816.
- Represente −100 em complemento de 2 com 8 bits.
Resposta
100 = 01100100; invertido 10011011; mais 1: 10011100. Verificação: −128 + 16 + 8 + 4 = −100.
- Converta o decimal 6 para código Gray de 4 bits e o BCD 0111 0010 para decimal.
Resposta
6 = 0110; Gray: 0, 0 ⊕ 1 = 1, 1 ⊕ 1 = 0, 1 ⊕ 0 = 1 → 0101. O BCD 0111 0010 é 72.
Para ver como um circuito soma e subtrai esses números, continue com os somadores binários.