Introdução4.1
Na aula anterior, você explorou os três principais sistemas de numeração que fundamentam nossa disciplina. É importante notar que todos eles compartilham as mesmas propriedades estruturais e, por essa razão, iniciaremos revisando brevemente esses conceitos antes de avançarmos para as técnicas de conversão entre bases.
Sistemas numéricos posicionais (Revisão)4.1.1
No contexto de um sistema numérico posicional, você pode trabalhar com uma base qualquer $b$. Anteriormente, vimos como é possível converter um número de uma base arbitrária para o sistema decimal ($b=10$), que é o padrão que utilizamos no cotidiano. Para ilustrar esse processo, tomemos como caso de estudo o número $789_{16}$.
Ao observar esse valor, note a existência de um pequeno número escrito de forma subscrita ao final. Esse valor representa a base na qual o número $789$ está representado. Para realizar a conversão para a base decimal, você deve multiplicar cada dígito pelos pesos da base, o que significa elevar o valor $b$ à potência da posição do dígito (contada da direita para a esquerda) subtraindo uma unidade.
No caso do $789_{16}$, o dígito $7$ ocupa a terceira posição. Consequentemente, o cálculo envolve $7 \times b^{3-1}$. Como a base é 16, para esse dígito específico, você terá $7 \times 16^2 = 7 \times 256 = 1792$. Esse procedimento deve ser repetido para os demais algarismos, somando-se todas as parcelas ao final para obter o resultado em decimal.
$$ \begin{split} 789_{16} &= (7\times 16^{3-1}) + (8\times 16^{2-1}) + (9\times 16^{1-1}) \\ &= (7\times 16^2) + (8\times 16^1) + (9\times 16^0) \\ &= (7\times 256) + (8\times 16) + (9\times 1) \\ &= 1792 + 128 + 9 \\[6pt] &\boxed{789_{16}=1929_{10}} \end{split} $$
Para que você consiga interpretar corretamente um número em uma base $b$ qualquer, é preciso compreender a capacidade de representação dada por $N$ dígitos. A expressão $b^N$ indica a quantidade total de números distintos que podem ser escritos. No entanto, como a contagem sempre se inicia no zero, o maior valor representável com $N$ dígitos é obtido pela fórmula $b^N - 1$. Se você considerar a base binária ($b=2$) com 4 dígitos (chamados de bits), poderá representar $2^4 = 16$ números diferentes, variando de 0 até o valor máximo $15$.
Essa fundamentação teórica permite que você utilize quaisquer outras bases, como a octal ($b=8$) ou a sexagesimal ($b=60$). Vale ressaltar que, para bases superiores a 10, surge uma necessidade especial, uma vez que nossos algarismos convencionais terminam no 9, precisamos utilizar outros caracteres para representar os dígitos restantes. Na base hexadecimal, por exemplo, o valor 10 é representado pela letra A, o 11 pela B, seguindo sucessivamente até o 15, que é representado pela letra F.
A seguir, você verá como realizar conversões do sistema decimal para as bases de interesse, além de explorar a transição direta entre binário e hexadecimal. Entenderemos, finalmente, o motivo técnico pelo qual a base hexadecimal é tão prevalente em nossa área.
Decimal4.2
Decimal para binário4.2.1
Embora existam diversos métodos para converter bases numéricas, o algoritmo que estudaremos agora é universal e funciona para transformar um valor decimal em qualquer outra base de destino. Ao considerar um número $N$ que você deseja converter, o primeiro passo consiste em dividi-lo pela base de destino e registrar o resto dessa divisão. Esse processo deve ser repetido sucessivamente, utilizando o quociente obtido na operação anterior como o novo dividendo, até que o quociente final seja igual a zero.
Ao concluir essas divisões, você obterá o número convertido ao ler os restos registrados na ordem inversa, ou seja, do último resto calculado em direção ao primeiro. A lógica desse algoritmo reside no fato de que, a cada divisão, você verifica quantas vezes a base está contida no número. Essa quantidade reflete as posições mais à esquerda no sistema posicional, enquanto o resto define o valor da posição atual. Como o quociente pode ser maior ou igual à base, a repetição é necessária até que não reste mais possibilidade de divisão.
Embora essa explicação possa parecer abstrata, o procedimento se torna intuitivo quando aplicado na prática. Considere, por exemplo, a conversão de $453_{10}$ para a base binária ($b=2$).
Problema: Converta $453_{10}$ para a base $b=2$. $$ \begin{split}453 \div 2 &= 226 \text{, resto } 1 \\226 \div 2 &= 113 \text{, resto } 0 \\113 \div 2 &= 56 \text{, resto } 1 \\56 \div 2 &= 28 \text{, resto } 0 \\28 \div 2 &= 14 \text{, resto } 0 \\14 \div 2 &= 7 \text{, resto } 0 \\7 \div 2 &= 3 \text{, resto } 1 \\3 \div 2 &= 1 \text{, resto } 1 \\1 \div 2 &= 0 \text{, resto } 1\end{split}$$
Note que, na primeira etapa, ao dividir 453 por 2, obtivemos o quociente 226 e o resto 1. Como o quociente é maior que zero, o processo continuou utilizando 226 como entrada para a próxima divisão. Essa sequência se manteve até a última linha, onde o quociente anterior era 1, resultando em um novo quociente 0 e resto 1. Para compor o número final, você deve escrever os restos de baixo para cima.
$$\boxed{453_{10} = 111000101_2}$$
Este procedimento é versátil e, portanto, servirá para converter decimais para qualquer outra base. Nos tópicos seguintes, exploraremos métodos simplificados específicos para determinadas bases. Para facilitar a memorização do algoritmo, você pode consultar o diagrama abaixo.
Decimal para hexa4.2.2
A base hexadecimal é excelente para simplificar a visualização de binários, mas não guarda uma relação direta de potências com a base decimal que facilite a conversão imediata. Por esse motivo, você deve aplicar o mesmo algoritmo de divisões sucessivas visto anteriormente, mas utilizando agora o divisor 16. O ponto de atenção aqui é a conversão obrigatória dos restos superiores a 9 para as letras correspondentes (A para 10, B para 11, até F para 15).
Problema: Converta $365_{10}$ para a base hexadecimal, $b=16$. $$\begin{split} 365_{10} \div 16 &= 22 \text{, resto } 13 \,(D) \\ 22 \div 16 &= 1 \text{, resto } 6 \\ 1 \div 16 &= 0 \text{, resto } 1 \end{split}$$
Observe que a primeira divisão resultou em um resto 13, o qual foi prontamente convertido para o dígito hexadecimal D. Mantendo o padrão de leitura dos restos de baixo para cima, o resultado é consolidado.
$$\boxed{365_{10} = 16D_{16}}$$
Binário4.3
Binário para decimal4.3.1
Você pode realizar a conversão de qualquer base para decimal utilizando o método de soma de pesos apresentado na revisão. Contudo, existe uma alternativa interessante e muitas vezes mais ágil para o sistema binário chamada algoritmo double-dabble.
O funcionamento deste algoritmo segue um fluxo lógico simples. Primeiro, você identifica o bit 1 mais à esquerda e o escreve como resultado inicial. A partir daí, dobra-se esse valor e soma-se o próximo bit à direita. O novo resultado é então dobrado e somado ao bit subsequente, repetindo-se esse ciclo de dobra e soma até que todos os bits do número original tenham sido processados. Vale destacar que essa técnica pode ser adaptada para converter qualquer base para decimal, bastando substituir a dobra (multiplicação por 2) pela multiplicação pelo valor da base $b$ correspondente.
Problema: Converta $11011_{2}$ para a base decimal utilizando o double-dabble.
Iniciando pelo dígito de maior peso (mais à esquerda), multiplicamos por 2 e somamos com o sucessor:
$$\begin{array}{l} 1 \times 2 = 2 \\ \phantom{1 \times 2}\; +\,1 = 3 \\[8pt] \hline\\ 3 \times 2 = 6 \\ \phantom{3 \times 2}\; +\,0 = 6 \\[8pt] \hline\\ 6 \times 2 = 12 \\ \phantom{6 \times 2}\; +\,1 = 13 \\[8pt] \hline\\ 13 \times 2 = 26 \\ \phantom{13 \times 2}\; +\,1 = 27 \end{array}$$
Ao final do processo, o valor acumulado representa o número em decimal.
$$\boxed{11011_{2} = 27_{10}}$$
Para fins de comparação, você pode observar o mesmo cálculo através do método padrão de pesos, que embora seja mais trabalhoso manualmente, é igualmente eficaz.
$$\begin{split} 11011_{2} &= (1\times2^4) + (1\times2^3) + (0\times2^2) + (1\times2^1) + (1\times2^0) \\ &= (1\times16) + (1\times8) + (0\times4) +(1\times2) + (1\times1) \\ &= 16 + 8 + 0 + 2 + 1 = 27 \end{split}$$
Binário para hexa4.3.2
Converter valores de binário para hexadecimal é uma tarefa extremamente simples devido à relação direta de potências entre as bases, visto que $2^4 = 16$. Essa característica permite que você converta os números apenas agrupando os bits.
Para realizar essa conversão, agrupe os bits de quatro em quatro, sempre partindo da direita para a esquerda. Caso o grupo mais à esquerda não possua quatro bits, você deve completá-lo com zeros. Após o agrupamento, basta converter cada conjunto de 4 bits isoladamente para seu correspondente hexadecimal.
Problema: Converta $1110100110_{2}$ para a base hexadecimal.
$$ \begin{align*} 1110100110_{2} &= \underbrace{\colorbox{lightgray}{00}11}_{3} \;\; \underbrace{1010}_{A}\;\; \underbrace{0110}_{6} \\[6pt] &= 3A6_{16} \end{align*} $$
Note que os zeros adicionados (em cinza) garantiram que o primeiro grupo também tivesse quatro dígitos. Como cada grupo de 4 bits resulta sempre em um valor entre 0 e 15 (F), a conversão é direta e mantém a ordem original.
$$\boxed{1110100110_{2} = 3A6_{16}}$$
Hexadecimal4.4
Hexa para decimal4.4.1
Para converter de hexadecimal para decimal, você deve utilizar o método convencional de soma dos pesos. Nesse caso, a base $b$ será 16 e os expoentes serão determinados pela posição do dígito menos uma unidade.
Problema: Converta $2AF_{16}$ para a base decimal.
$$ \begin{split} 2AF_{16} &= (2\times16^2) + (A\times16^1) + (F\times16^0) \\ &= (2\times256) + (10\times16) + (15\times1) \\ &= 512 + 160 + 15 = 687_{10} \\[6pt] &\boxed{2AF_{16} = 687_{10}} \end{split} $$
Hexa para binário4.4.2
A conversão inversa, de hexadecimal para binário, utiliza a mesma lógica de agrupamento. Cada dígito hexadecimal individual deve ser expandido para o seu equivalente de 4 bits em binário. É por essa facilidade de expansão e contração que o sistema hexadecimal é frequentemente chamado de método taquigráfico ou compacto para representar sequências binárias.
Problema: Converta $9\text{F}2_{16}$ para binário.
$$ \begin{aligned} 9\text{F}2_{16} = \quad & 9 \qquad \text{F} \qquad 2 \\ & \downarrow \qquad \downarrow \qquad \downarrow \\ = \quad & 1001 \quad 1111 \quad 0010 \\ = \quad & 100111110010_{2} \end{aligned} $$
O sistema hexadecimal é onipresente em sistemas digitais por oferecer uma visualização compacta e segura. Em computação, lidamos frequentemente com sequências de até 64 bits que nem sempre representam números, mas sim códigos ou endereços. Nessas situações, comparar valores como $6E67$ é muito mais eficiente e menos propenso a falhas humanas do que analisar uma sequência longa e confusa de zeros e uns.
Questões4.5
Converta o número binário $1101110_{2}$ para seu equivalente decimal utilizando o método da soma dos pesos.
Qual é o maior valor decimal que pode ser representado utilizando um número hexadecimal de 3 dígitos? Determine também o total de valores distintos possíveis.
Realize a conversão de $101101_{2}$ para decimal através do método double-dabble, demonstrando cada passo de multiplicação e soma.
Utilize o método de divisões sucessivas para converter $95_{10}$ para binário, identificando os bits MSB (mais significativo) e LSB (menos significativo).
Com base no texto, explique por que o hexadecimal é considerado uma forma taquigráfica e descreva uma situação prática onde o desenvolvedor se beneficia desse sistema.
Converta $2\text{C}5_{16}$ diretamente para binário, expandindo cada dígito para o grupo de 4 bits correspondente.
Transforme o binário $1010111100_{2}$ em hexadecimal, lembrando-se de realizar o agrupamento correto da direita para a esquerda.
Liste os próximos cinco números da sequência hexadecimal após o valor $\text{A}8\text{F}_{16}$.
Calcule a quantidade mínima de bits necessária para representar o número decimal $2000_{10}$.
Converta $438_{10}$ para hexadecimal utilizando divisões sucessivas, atentando para a conversão correta dos restos para letras.
Próximos passos4.6
No próximo capítulo, Códigos, você conhecerá os códigos mais utilizados em circuitos lógicos, abrangendo desde a representação em displays até a codificação de caracteres alfanuméricos.