Conversões de Sistemas Numéricos
Quando escrevemos programas para microcontroladores estamos normalmente presos a lidar com 3 sistemas numéricos diferentes: decimal, binário e hexadecimal (ou hexadecimal). Nós usamos decimal porque vem naturalmente; é assim que contamos. Infelizmente, não é assim que os computadores contam. Como os computadores e microcontroladores são limitados a 1 e 0, eles contam usando sequências destes números. Este é o sistema de números binários. Os números binários são normalmente prefixados com os caracteres ‘0b’, que não fazem parte do número. Algumas vezes eles também são subdivididos em grupos de 4 dígitos para torná-los mais fáceis de ler, bem como para facilitar a relação com o sistema de números hexadecimais. Um exemplo de um número binário é 0b0100.1011. Os pontos no número não representam nada, apenas facilitam a leitura do número.
O sistema binário é simples de entender, mas são necessários muitos dígitos para usar o sistema binário para representar números grandes. O sistema hexadecimal pode representar números muito maiores usando menos caracteres, e assemelha-se muito aos números binários. Os números hexadecimais são geralmente prefixados com os caracteres ‘0x’, que não fazem parte do número. Um único dígito hexadecimal pode representar quatro dígitos binários!
Números binários só podem consistir em 1’s e 0’s; tipicamente um número binário consiste em 8 dígitos (ou alguns múltiplos de 8) se estiver sendo usado em algum tipo de computador (ou microcontrolador). É útil saber como converter um número binário em um número decimal e vice versa. Então como convertemos entre sistemas numéricos? Primeiro considere como determinamos o valor de um número decimal. O número 268 pode ser decomposto em 200 + 60 + 8, ou 2 * (10^2) + 6 * (10^1) + 8 * (10^0). Há dois números importantes que temos de saber para ‘desconstruir’ o número – a base do sistema numérico e a localização do dígito dentro do número. A base de um número decimal é 10. Quando estamos convertendo o número 268, 2 é o segundo dígito, 6 é o primeiro dígito e 8 é o dígito zero. Cada dígito tem de ser escalado de acordo com a sua posição dentro do número. A escala do dígito é a base do sistema numérico elevado à potência da localização do dígito no número. Então cada número é escalado, e então todos os dígitos escalados são adicionados para encontrar o valor total do número.
O mesmo método pode ser usado para encontrar o valor de um número binário. Por exemplo, vejamos o número 0b1011.0101. A base do sistema binário é 2 (o prefixo 0b é frequentemente usado em código para indicar que o número está no formato binário). O valor do nosso número é: 1*(2^7)+0*(2^6)+1**(2^5)+1*(2^4)+0*(2^3)+1*(2^2)+0*(2^1)+1*(2^0), que é igual a 181.
0b1011.0101. Que maneira completamente ineficiente de digitar um número! Mas nós podemos representar o mesmo número binário usando apenas 2 dígitos hexadecimais. Mas primeiro vamos começar por converter um número hexadecimal (hexadecimal) para decimal, como fizemos para um número binário. Que tal 0xB5? Espera, o quê?! O prefixo 0x é usado em código para indicar que o número está sendo escrito em hexadecimal. Mas o que é que o ‘B’ está a fazer ali? O formato hexadecimal tem uma base de 16, o que significa que cada dígito pode representar até 16 valores diferentes. Infelizmente, ficamos sem dígitos numéricos depois de ‘9,’ por isso começamos a usar letras. A letra ‘A’ representa 10, ‘B’ é 11, ‘C’ é 12, ‘D’ é 13, ‘E’ é 14 e ‘F’ é 15. ‘F’ é o maior dígito do sistema de numeração hexadecimal. Nós convertemos o número da mesma forma que antes. O valor de 0xB5, então, é: B*(16^1)+5*(16^0) ou 181.
Saber como converter binário e hexadecimal é importante, mas a conversão de números mais útil é provavelmente a conversão entre hex e binário. Estes dois sistemas de numeração realmente funcionam muito bem juntos. Os sistemas de numeração são relacionados de tal forma que um único dígito hexadecimal representa exatamente 4 dígitos binários, e assim 2 dígitos hexadecimais podem representar 8 bits (ou dígitos binários). Aqui está uma tabela que mostra como cada dígito hexadecimal está relacionado com o sistema binário:
Valor binário | Valor hexadecimal |
0000 | 0 |
0001 | 1 |
0010 | 2 |
0011 | 3 |
0100 | 4 |
0101 | 5 |
0110 | 6 |
0111 | 7 |
1000 | 8 |
1001 | 9 |
1010 | A |
1011 | B |
1100 | C |
1101 | D |
1110 | E |
111111 | F |
Por exemplo, para converter o número hexadecimal 0x1C para binário, encontraríamos o valor binário correspondente para 1 e C e os combinaríamos. Então, 0x1C em binário é 0b0001.1100. Se quiséssemos descobrir o valor hexadecimal para um número binário, iríamos para o outro lado. Para encontrar a representação hexadecimal do número binário 0b0010.1011 primeiro encontramos o valor hexadecimal para 0010, depois o valor hexadecimal para 1011 e combinamo-los; o valor hexadecimal seria 0x2B.
Existem muitas ferramentas grátis disponíveis para ajudar a converter entre estes sistemas de numeração, basta ir ao Google ‘hex number conversion’. Se você usa o Windows como sistema operacional, você tem uma ótima ferramenta embutida na calculadora. Basta mudar a calculadora para o modo científico e você pode converter entre os sistemas de numeração digitando um número e depois mudando o formato da calculadora!