bitGateLab Digital · Aprenda
Português (Brasil)
Abrir o simulador

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:

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.

  1. 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.
  2. Lendo os restos de baixo para cima: 156 = 100111002. Verificação: 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 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:

  1. Escreva o número positivo com todos os seus bits.
  2. Inverta cada bit (isso é o complemento de 1).
  3. 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).

  1. 45 = 00101101. Ao inverter: 11010010. Ao somar 1: 11010011 = −45.
  2. Verificação com os pesos: −128 + 64 + 16 + 2 + 1 = −45.
  3. Agora 25 + (−12). 25 = 00011001; 12 = 00001100, invertido 11110011, mais 1: 11110100 = −12.
  4. Soma: 00011001 + 11110100 = 1 00001101. O carry que sai do bit 8 é descartado.
  5. Resultado: 00001101 = 13. Correto.
Overflow (estouro): se você soma dois números de mesmo sinal e o resultado tem o sinal contrário, o resultado não cabe nos bits disponíveis. Por exemplo, em 8 bits 100 + 50 = 01100100 + 00110010 = 10010110, que em complemento de 2 vale −106 em vez de 150. Somar números de sinais diferentes nunca causa overflow.

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.

DecimalBinárioGrayDecimalBinárioGray
000000000810001100
100010001910011101
2001000111010101111
3001100101110111110
4010001101211001010
5010101111311011011
6011001011411101001
7011101001511111000

Exemplo 3: binário 1011 para Gray e de volta.

  1. Copie o primeiro bit: 1.
  2. 1 ⊕ 0 = 1; 0 ⊕ 1 = 1; 1 ⊕ 1 = 0. Gray = 1110.
  3. 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

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.

  1. Coloque quatro entradas como bits b3 a b0 e conecte um display ou quatro LEDs para ver o valor.
  2. Acrescente três portas XOR: g2 = b3 ⊕ b2, g1 = b2 ⊕ b1, g0 = b1 ⊕ b0, e conecte b3 diretamente a g3.
  3. Mude as entradas de 0000 a 1111 e observe nas saídas que, entre um valor e o seguinte, muda um único bit Gray.
  4. Gere a tabela-verdade do circuito e compare-a com a tabela deste artigo.

Exercícios

  1. Converta 110101102 para hexadecimal e para decimal.
    Resposta

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

  2. Converta 200 para binário e para hexadecimal.
    Resposta

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

  3. Represente −100 em complemento de 2 com 8 bits.
    Resposta

    100 = 01100100; invertido 10011011; mais 1: 10011100. Verificação: −128 + 16 + 8 + 4 = −100.

  4. 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.