|
O hexadecimal é um outro sistema numérico que é
normalmente usado com microprocessadores. Ele permite fácil conversão
ao sistema numérico binário. Devido a isso, e também
devido ao fato que a notação hexadecimal simplifica a manipulação
de dados. Tal qual o nome diz, hexadecimal tem base 1610. Ele
usa os dígitos 0 até 9 e as letras A até F.
As letras são usadas pois é necessário
representar 1610 valores diferentes com um simples dígito
para cada valor. Portanto, as letras de A até F são usadas
para representar os valores numéricos de 1010 até
1510.
Os números iniciais entre os sistemas decimal e hexadecimal são
de valores iguais, 010 = 016 ;
310 = 316 ; 910 = 916.
Para números maiores que 9, as relações
seguintes existem:
1010 = A16 ; 1110
= B16 ; 1210 = C16
; 1310 = D16 ;
1410 = E16 e 1510 =
F16.
Usar letras em contagem pode parecer grosseiro até
a familiarização com o sistema. A tabela DEC
e HEXA ilustra o relacionamento entre inteiros decimal e hexadecimal,
enquanto tabela FRAÇÕES
ilustra o relacionamento entre frações decimal e hexadecimal.
Como nos sistemas numéricos anteriores, cada posição
dos dígitos de um número hexadecimal tem um peso posicional
o qual determina a magnitude do número. O peso de cada posição
é determinado por alguma potência do número base do
sistema (neste caso, 16). O valor total do número pode ser calculado
considerando os dígitos específicos e os pesos de suas posições.
(a tabela mostra uma lista resumida das potências de 16). Por exemplo,
o número hexadecimal E5D7,A3 pode ser escrito com notação
posicional como se segue:
(E x 163) + (5
x 162) + (D x 161) + (7
x 160) + (A x
16-1) + (3 x 16-2)
O valor decimal do número E5D7,A3
é determinado pela multiplicação de cada dígito
pelo seu valor posicional e pela soma dos resultados.
| Potências de 16 |
| 16-4 =1/6553610= 0,000015258789062510
|
160 =110 |
| 16-3 = 1/409610 =0,00024414062510 |
161 =1610 |
| 16-2 = 1/25610 =0,0039062510 |
162 =25610 |
| 16-1 = 1/1610 =0,062510 |
163 =4.09610 |
| Como nos sistemas numéricos anteriores, o ponto
base ( ponto hexadecimal ) separa a parte inteira da parte fracionária
do número |
164 =65.53610 |
| 165 =1.048.57610 |
| 166 =16.777.21610 |
| parte inteira |
parte fracionária |
| (E x 163)+(5 x 162)+(D x 161)+(7
x 160) |
+ (A x 16-1) + (3 x 16-2) |
| (14 x 4096)+(5 x 256)+(13 x 16)+(7 x 1) |
+ (10 x 1/16) + (3 x 1/256) = |
| 57344 + 1280 + 208 + 7 |
+ 0,625 + 0,01171875 |
| Resultado |
= 58839, 6367187510 |
Conversão de decimal para hexadecimal é realizada da mesma
maneira que a conversão de decimal para binário, mas com
uma base numérica de 1610. Como exemplo, o número
decimal 156 é convertido no seu equivalente hexadecimal.
| Divisão |
Resto |
|
| 156/16 = 9 |
12 = C |
LSD |
| 9/16 = 0 |
9 = 9 |
MSD |
| 15610
=9CH |
|
Divide-se o número decimal por 1610
e anota-se o resto. Se o resto exceder 9, converte-se o número
de dois dígitos no seu equivalente hexadecimal. (1210
= CH neste exemplo). Então divida o quociente por
16 e novamente observe o resto. Continue dividindo até que
um quociente de 0 resulte. Então colete os restos começando
pelo último ou dígito mais significativo (MSD) e continuando
até o primeiro ou dígito menos significativo (LSD).
O número 9CH = 15610. |
Observe que a letra H depois de um número é
algumas vezes usada para indicar hexadecimal. No entanto, usaremos o subscrito
16.
| Vamos a mais um exemplo, o número decimal 4763210
é convertido no seu equivalente hexadecimal.O processo de divisão
continua até que resulte um 0 quociente. Os
restos são coletados, produzindo o número BA1016
= 4763210. Qualquer resto que exceda o dígito
9 deve ser convertido no seu equivalente em letras (neste exemplo,
10 = A e 11 = B). |
| Divisão |
Resto |
|
| 47632 / 16 = 2977 |
0 = 0 |
LSD |
| 2977 / 16 = 186 |
1 = 1 |
|
| 186 / 16 = 11 |
10 = A |
|
| 11 / 16 = 0 |
11 = B |
MSD |
| 4763210
= BA1016 |
|
Para converter uma fração decimal para uma fração
hexadecimal, multiplique a fração sucessivamente por 1610
(base hexadecimal). Como um exemplo à fração decimal
0,78125 é convertido no seu equivalente hexadecimal.
Multiplique o número decimal por 1610. Se o produto
exceder um, subtraia o inteiro do produto. Se a parte inteira exceder
9, converta o número de 2 dígitos para o seu equivalente
hexadecimal. Então multiplique a fração resultante
por 1610 e novamente observe a parte inteira.
| Multiplicação |
Parte inteira |
| 0,78125x16 =12,5=0,5 |
12 = C |
MSD |
| 0,50000x16 = 8,0= 0 |
8 = 8 |
LSD |
| 0,7812510
= 0.8CH |
|
Continue multiplicando até resultar em um
número inteiro sem fração, ou você deve
apenas continuar a conversão até a precisão que
você desejar. Colete os inteiros começando no ponto base
com o MSD e continuando até o LSD. O número 0·C816
= 0,7812510. |
A fração 0,13610 será convertida no seu
equivalente hexadecimal com cinco algarismos significativos.
| O número 0.22D0E16
é aproximadamente igual a 0,13610.
Se converter 0·22D0E16 para decimal (usando notação
posicional), será encontrado: 0.22D0E16 = 0,135999679565429687510.
Este exemplo mostra que estender a precisão da conversão
é de pequena importância, a menos que extrema exatidão
seja requerida. |
| Multiplicação |
Parte inteira |
| 0,136x16 = 2,176 =0,176 |
2 = 2 |
MSD |
| 0,176x16 = 2,816 =0,816 |
2 = 2 |
|
| 0,816x16 = 13,056 =0,056 |
13 = D |
|
| 0,056x16 = 0,896 =0,896 |
0 = 0 |
|
| 0,896x16 = 14,336 =0,336 |
14 = E |
LSD |
| 0,13610
= 0.22D0EH |
|
A conversão de um inteiro decimal para hexadecimal requer uma
técnica diferente do que a conversão de uma fração.
Portanto quando se converter um número decimal composto de uma
parte inteira e de uma parte fracionária, deve-se separar a parte
inteira e a fracionária, e então realizar a operação
apropriada em cada parte. Após as conversões, deve-se recombinar
a parte inteira e a parte fracionária.
Por exemplo, o número decimal 124,78125 é
convertido no seu equivalente hexadecimal. 124,7812510
= 12410 + 0,7812510.
| Divisão |
Resto |
| 124 ÷ 16 = 7 |
12 = C |
LSD |
| 7 ÷ 16 = 0 |
7 = 7 |
MSD |
12410 = 7C16 |
| Multiplicação |
Inteiro |
| 0,78125 X 16 = 12,5 = 0,5 |
12 = C |
MSD |
| 0,50000 X 16 = 8,0 = 0 |
8 = 8 |
LSD |
| 0,7812510 =0,C8H |
| 124,7812510
= 12410 + 0,7812510 = 7C16+0,C816
= 7C,C8 16 |
Conversão entre o Sistema Numérico Binário
e o Hexadecimal
Este método é muito útil em muitos microprocessadores.
O treinador usado neste curso usa o sistema numérico hexadecimal
para representar quantidades binárias. Como resultado, conversões
freqüentes de binário para hexadecimal são necessárias.
As tabelas DEC e HEXA e,
FRAÇÕES ilustram
o relacionamento existente entre inteiros e frações binária
e hexadecimal.
| Como se
sabe, quatro bits de um número binário permitem exatamente
1610 combinações. Entretanto, pode-se representar
um número binário de 4 bits com um número hexadecimal
de 1 dígito. |
|
11012 = (1x23)+(1x22)+(0x21)+(1x20)
= 8+4+0+1
= 1310
= D16 |
|
101101102
Reescrito como
MSB -> 1011
0110 <- LSB
Resulta
B 616
|
Devido a esta relação,
a conversão de binário para hexadecimal é simples
e rápida. Por exemplo o número binário 1 0
1 1 0 1 1 0 é convertido no seu equivalente hexadecimal. |
Para converter um número binário para hexadecimal, primeiro
separa-se o número em grupos contendo quatro bits,
começando com o bit menos significativo, então converte-se
cada grupo de 4 bits no seu equivalente hexadecimal.
Não se deve esquecer de usar dígitos com letras quando preciso.
Isto resulta em um número hexadecimal igual em valor ao número
binário.
Convertendo agora um grande número binário
(10101101101) no seu equivalente hexadecimal.
Novamente o número binário é separado em grupos
de 4 bits começando com o LSB. Entretanto, o terceiro grupo
contém apenas três bits. Desde que cada grupo deve
conter quatro bits, um zero deve ser acrescentado após o
MSB. O terceiro grupo terá então 4 bits sem alteração
no valor do número binário. Agora cada grupo de 4
bits pode ser convertido em seu equivalente hexadecimal. Quando
se acrescentar zeros a um inteiro binário sempre coloque-os
a esquerda do bit mais significativo.
|
10101101101
Reescrito como
MSB -> 0101 0110
1101 <- LSB
Resulta 56D16 |
Frações binárias também podem ser convertidas
nos seus equivalentes hexadecimais usando o mesmo processo, com uma exceção;
os bits binários são separados em grupos de quatro, começando
com o bit mais significativo (no ponto base).
| Por exemplo, a fração binária
0.01011011 é convertida no seu equivalente
hexadecimal.
Novamente, deve-se separar o número binário em grupos
de quatro, começando pelo ponto Base. Então converta
cada grupo de 4 bits no seu equivalente hexadecimal, isto resulta
um número hexadecimal igual em valor ao número binário. |
0.010110112
Reescrito como
MSB -> 0 . 0101 1011
<- LSB
Resulta 0 . 5
B16
|
Agora, converte-se uma fração binária grande (
0.1101001101) no seu equivalente hexadecimal.
Separa-se o número binário em grupos de 4 bits, começando-se
no ponto binário (MSB). Observe que cada grupo deve conter quatro
bits, dois zeros devem ser usados após o (LSB). O terceiro grupo
terá então quatro bits sem qualquer alteração
no valor do número binário.
| 0.11010011012
reescrito como: 0 .1101
0011 0100
resulta 0 . D
3 416
|
Agora cada grupo de quatro bits pode
ser convertido no seu equivalente hexadecimal. Quando se soma “zeros”
a uma fração binária, eles sempre são
colocados a direita do bit menos significativo. |
Agora, um número binário contendo uma parte fracionária
e uma parte inteira (110110101.01110111) será convertido no seu
equivalente hexadecimal.
A parte inteira do número é separada em grupos de quatro,
começando no ponto base.Observe que três zeros foram acrescentados
ao terceiro grupo para completá-lo.
| A parte fracionária do número
é separada em grupos de quatro, começando pelo ponto
base. (Nenhum zero foi necessário para completar os grupos
fracionários). Os grupos de 4 bits fracionários e inteiros
são então convertidos para hexadecimal. O número
110110101.011101112 = 1B5.7716. Nunca
desloque o ponto base de maneira a formar grupos de 4 bits. |
110110101·011101112
Reescrito como
MSB -> 0001 1011 0101.0111 0111 <- LSB
resulta 1 B 5 . 7
716 |
A conversão de hexadecimal para binário é exatamente
o oposto do processo anterior; simplesmente converte-se cada número
hexadecimal em seu equivalente binário de 4 bits.
|
Por exemplo, converter o número hexadecimal
8F.41 no seu equivalente binário. Converte-se cada dígito
hexadecimal em um número binário de 4 bits. Então
condensa-se os grupos de 4 bits para formar o valor binário
igual ao valor hexadecimal.
O número 8F.4116 = 10001111.010000012 |
8
F . 4 116
resulta MSB->
1000 1111
. 0100 0001
<- LSB
reescrito como 10001111
. 010000012 |
Agora um outro exemplo, o número hexadecimal 175.4E16
será convertido no seu equivalente binário.
|
1 7 5 . 4 E16
resulta
MSB-> 0001 0111 0101.0100 1110 <- LSB
reescrito como 101110101.01001112
|
Novamente, cada dígito hexadecimal é
convertido no seu equivalente binário de 4 bits. Entretanto,
neste exemplo existem três zeros insignificantes na frente
do MSB e um após o LSB.
Desde que estes zeros não tem valor, eles pode ser removidos
do resultado final. |
|