Apesar da eletrônica digital trabalhar com o sistema binário, existem outros sistemas de numeração importantes. Portanto, nesta aula, vamos aprender sobre o sistema octal, o hexadecimal e um pouco mais sobre o sistema binário.
Na aula anterior, aprendemos sobre o sistema binário e suas características.
Informações básicas
A aula passada foi sobre o sistema binário como um todo, entretanto, na aula de hoje, veremos apenas sobre sistemas de NUMERAÇÃO (bases). No caso, o binário, o octal e o hexadecimal. Isto é, lidaremos apenas com números e não com formas de enviar/interpretar uma mensagem.
A princípio, parece não ter utilidade aprender sobre outros sistemas de numeração, mas, em muitas aplicações, é comum de se trabalhar com a representação hexadecimal dos números. Por outro lado, o sistema octal já não é tão utilizado atualmente.
O nome de alguns dos sistemas já entregam a característica essencial deles. Para entender a lógica de contagem destes sistemas, recomendo ler o tópico “sistema de numeração” da última aula.
Binário
Conforme vimos na última aula, esse sistema possui apenas dois símbolos para escrever os números: 0 e 1. Cada dígito que aparece em um número binário é chamado de bit. E o conjunto de 8 bits (8 dígitos binários) é chamado de byte.
Nas siglas, o bit é representado com um ‘b’ minúsculo e o byte como um ‘B’ maiúsculo. Existem duas formas de se representar um número binário grande.
- Com o prefixo do Sistema Internacional, que é comum em nossas vidas: kiloByte (KB), megaByte (MB)… que é basicamente o número vezes 10 elevado a algum expoente múltiplo de 3 (3,6…).
- Com o prefixo da Comissão Eletrotécnica Internacional (IEC): kibiByte (KiB), mebiByte (MiB), gibiByte (GiB)… que é o número vezes 2 elevado a algum expoente múltiplo de 10 (10, 20, 30…).
Por fim, existem dois termos comuns de serem utilizados, que são relacionados ao sistema de numeração binário: MSB e LSB. Que significam:
MSB: Most Significant Bit: É o bit mais significativo. Isto é, o bit de valor mais à esquerda do número binário. É aquele de maior valor no número.
LSB: Least Significant Bit. É o bit menos significativo. Isto é, o bit mais à direita do número binário. É aquele com menor valor no número.
O primeiro 1 que aparece da esquerda para direita é o MSB e o último bit que aparece (0 ou 1) é o LSB.
Octal
Como o nome sugere, esse sistema possui 8 símbolos para representar os números: 0, 1, 2, 3, 4, 5, 6 e 7. O número 8 em octal, por exemplo, seria: 10. O número 9: 11. E assim por diante…
Hexadecimal
Apesar do nome sugerir, este sistema possui, na verdade, 16 símbolos diferentes para representar números. Os símbolos são, na ordem crescente: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.
A ordenação vai de 0 a 9 e depois segue com as letras em ordem alfabética de ‘A’ até ‘F’. O número 16 em hexadecimal, por exemplo, seria 10.
As máquinas (sistemas digitais) entendem apenas a numeração binária, mas ela pode ficar muito extensa quando pensamos em um sistema complexo como o computador. Sendo assim, nós utilizamos o sistema hexadecimal para comunicar com estas máquinas (no fim, o número hexadecimal é convertido em binário).
Não é comum de ver isto, pois, os softwares de computador que utilizamos estão muitas camadas acima da comunicação direta com a máquina. Um exemplo é quando acessamos um endereço de memória do computador ou de um microcontrolador. Em alguns casos, o endereço é fornecido em hexadecimal.
Representação
Agora que você conhece os principais sistemas de numeração, é importante saber como representar os números de um certo sistema de numeração.
Imagine que você quer representar o número 2 em binário. Se você apenas escrever 10 (2 em binário), o número pode ser confundido com o número 10 (10 em decimal), ou o número 10 (8 em octal) ou até mesmo o número 10 (16 em hexadecimal).
Deste modo, para representar o número desejado, basta escrevê-lo normalmente juntamente com a base do sistema de numeração (binário, octal ou hexadecimal) no fim do número de forma que ela fique subscrita. Por exemplo, abaixo temos o número 2 em binário à esquerda, e o número 10 em decimal à direita:
102 1010
E é claro, você pode ter reparado que eu escrevi diversos números da base decimal ao longo deste post sem colocar nenhum número subscrito. Isto porque, de certa forma, é uma convenção considerar que a base é decimal se nada for escrito.
Representação em linguagem de programação
Em linguagem de programação, as três bases são, comumente, representadas da seguinte forma:
- Binário: O número começa com 0b. Ex: 0b101 (5 em decimal)
- Octal: O número começa com 0. Ex: 013 (11 em decimal)
- Hexadecimal: O número começa com 0x. Ex: 0xA (10 em decimal)
No caso de decimal, basta escrever normalmente.
Possivelmente, você já deve ter visto uma das três formas de escrita em algum programa de computador.
Conversão entre sistemas
Agora, precisamos saber como fazer a conversão entre um número de um sistema para outro. A maioria das vezes você converterá apenas entre binário e decimal ou vice-versa, pois, para projetar os sistemas digitais, usaremos os números binários.
As demais conversões são úteis nos casos que pontueis no tópico sobre o sistema de numeração hexadecimal (comunicação “direta” entre ser humano e máquina).
Lembrete: para gravar os procedimentos abaixo, é necessário praticar. Então, depois de aprender, fique convertendo números aleatórios para treinar.
Qualquer base -> decimal
Para converter qualquer base em decimal, basta seguir o raciocínio abaixo:
- Embaixo de cada digito do número, escreva o número da base. Ex.: Se for hexadecimal, escreva 16 embaixo de cada dígito.
- Coloque um expoente em cada um destes números que foram escritos, seguindo a ordem:
- O digito que está logo antes da vírgula tem expoente 0.
- Todos os outros à sua esquerda vão ter o expoente somado +1 com o expoente do número à direita. Ex.: o 1º digito antes da vírgula tem expoente 0, o segundo tem expoente 1, o terceiro 2 e assim em diante.
- Todos os dígitos à direita da virgula terão expoente subtraído -1 com o expoente do número à esquerda. Ex.: o 1º digito depois da vírgula tem expoente -1, o segundo tem expoente -2, o terceiro -3 e assim em diante.
- Calcule cada número elevado a seu expoente e multiplique cada resultado pelo digito do número original que está acima deste. (Ficará mais claro com a imagem abaixo).
- Some os resultados do item anterior e você terá o número na forma decimal.
Veja o exemplo abaixo convertendo os números 10,102 e 10,1016 em decimal.
Decimal -> qualquer base
Para converter um número decimal em qualquer base, basta seguir o raciocínio abaixo:
- Divida o número decimal pelo número da base. Ex.: se for hexadecimal, divida o número decimal por 16. A divisão deve possuir quociente e resto, não podem haver casas decimais.
- O resto deve ser calculado segundo o sistema de numeração a qual está sendo convertido. Portanto, se estamos convertendo decimal em hexadecimal e o resto foi 10, devemos escrever ‘A’ ao invés de 10.
- Repita o procedimento acima com o quociente da divisão anterior até que o quociente seja menor do que a base do sistema.
- Quando terminar o procedimento, agrupe os restos de todas as divisões e o último quociente de forma sequencial. O primeiro número da sequência deve ser o último quociente seguido do resto da última divisão e dos outros restos.
Para variar, veja o exemplo abaixo convertendo o número 10 em binário e hexadecimal.
No segundo caso, bastou apenas uma divisão para chegar à conversão (nem precisa do método na verdade né). E não é necessário escrever 0A16, pode escrever direto: A16. Coloquei o 0 apenas para seguir a regra do método que mostrei.
Octal/Hexadecimal em binário
Para converter um número octal/hexadecimal em binário, basta seguir o raciocínio abaixo:
- Separe cada dígito do número octal/hexadecimal.
- Converta cada digito em um número binário da seguinte forma:
- Se o número original for octal, a conversão em binário deve possuir 3 dígitos (preencha com 0 onde não houver números).
- Se o número original for hexadecimal, a conversão em binário deve possuir 4 dígitos (preencha com 0 onde não houver números).
- Esta etapa é fácil se você tiver costume com os números binários. Por exemplo, saber de cabeça como escrever 7 em binário. Se este não for o caso, pratique mais a ordem dos números binários ou consulte uma tabela.
- Agrupe os números convertidos na ordem dos dígitos do número original.
Veja o exemplo abaixo convertendo os números 218 e 2116 em binário.
Binário em octal/hexadecimal
Este procedimento é basicamente o inverso do anterior:
- Divida o número binário em blocos de:
- 3 dígitos para a conversão em octal.
- 4 dígitos para a conversão em hexadecimal.
- A divisão dos blocos é feita da direita para a esquerda. Se faltar números no último bloco, basta preencher a parte esquerda com 0’s até preencher o bloco.
- Converta cada bloco em um número octal/hexadecimal.
- Agrupe os blocos convertidos na ordem dos dígitos do número original.
Veja o exemplo abaixo convertendo o número 10001102 em octal e hexadecimal.
Considerações finais
Pode parecer que os procedimentos acima são inúteis, mas os que envolvem os números binários e os decimais serão bem úteis quando formos projetar nossos primeiros sistemas digitais. E é bom aprender para entender outros assuntos relacionados.
Em último caso, tem sempre a calculadora do windows na função “Programador” ou o Google para fazer a conversão.
Na aula seguinte, vamos começar a ver como fazer um sistema digital com os importantíssimos componentes chamados portas lógicas elementares.
Portas lógicas – Aula 4 – ED