Professional Documents
Culture Documents
William Shakespeare
Sistemas de numerao
Objetivos
Neste captulo, voc aprender:
A entender conceitos bsicos de sistemas de numerao como base, valor posicional e valor
de smbolo.
A entender como trabalhar com nmeros representados nos sistemas de numerao binrios,
octais e hexadecimais.
A converter nos dois sentidos entre nmeros decimais e seus equivalentes binrios, octais e
hexadecimais.
II
Apndice H
Sistemas de numerao
H.1 Introduo
Sumrio
H.1 Introduo
Neste apndice, introduzimos os principais sistemas de numerao que os programadores de Java utilizam especialmente quando esto
trabalhando em projeto de software que requer ntima interao com hardware no nvel de mquina. Projetos como esse incluem sistemas
operacionais, software de rede de computador, compiladores, sistemas de banco de dados e aplicativos que requerem alto desempenho.
Quando escrevemos um inteiro como 227 ou 63 em um programa Java, o nmero assumido como estando no sistema de nmeros
decimais (base 10). Os dgitos no sistema de numerao decimal so 0, 1, 2, 3, 4, 5, 6, 7, 8 e 9. O dgito mais baixo 0 e o dgito mais alto
9 um a menos que a base 10. Internamente, os computadores utilizam o sistema de numerao binrio (base 2). O sistema de numerao
binrio tem apenas dois dgitos, 0 e 1. Seu dgito mais baixo 0 e seu dgito mais alto 1 um a menos que a base 2.
Como veremos, nmeros binrios tendem a ser muito mais longos que seus equivalentes decimais. Os programadores que trabalham
em linguagens assembly e em linguagens de alto nvel como Java, que permitem que os programadores alcancem o "nvel de mquina",
acham incmodo trabalhar com nmeros binrios. Ento dois outros sistemas de numerao, o sistema de numerao octal (base 8) e o sistema de numerao hexadecimal (base 16) so populares principalmente porque eles tornam conveniente abreviar nmeros binrios.
No sistema de numerao octal, os dgitos variam de 0 a 7. Uma vez que o sistema de numerao binrio e o sistema de numerao octal
tm menos dgitos que o sistema de numerao decimal, seus dgitos so os mesmos que os dgitos correspondentes em decimal.
O sistema de numerao hexadecimal impe um problema uma vez que ele requer dezesseis dgitos o dgito mais baixo o 0 e um
dgito mais alto um valor equivalente ao decimal 15 (um a menos que a base 16). Por conveno, utilizamos as letras A a F para representar os dgitos hexadecimais correspondentes aos valores decimais de 10 a 15. Portanto, em hexadecimal, podemos ter nmeros como 876
consistindo unicamente em dgitos do tipo decimal, nmeros como 8A55F consistindo em dgitos e letras, e nmeros como FFE consistindo
unicamente em letras. Ocasionalmente, um nmero hexadecimal forma uma palavra comum como FACE ou FOOD isso pode aparecer
estranho para programadores acostumados a trabalhar com nmeros. Os dgitos dos sistemas de numerao binrio, octal, decimal e hexadecimal esto resumidos na Figura H.1 e Figura H.2.
Cada um desses sistemas de numerao utiliza notao posicional cada posio na qual um dgito escrito tem um valor posicional
diferente. Por exemplo, no nmero decimal 937 (o 9, o 3 e o 7 so referenciados como valores de smbolo), dizemos que o 7 escrito na
posio das unidades, o 3 escrito na posio das dezenas e o 9 escrito na posio das centenas. Observe que cada uma dessas posies
uma potncia da base (base 10) e que essas potncias iniciam em 0 e aumentam por 1 medida que nos movemos para a esquerda do
nmero (Figura H.3)
H.1 Introduo
Dgito binrio
Dgito octal
Dgito decimal
Dgito hexadecimal
9
A
III
Figura H.1 | Os dgitos dos sistemas de numerao binrio, octal decimal e hexadecimal.
Atributo
Binrio
Octal
Decimal
Hexadecimal
Base
10
16
Dgito decimal
Nome da posio
centenas
dezenas
unidades
Valor posicional
100
10
10
10
100
Para nmeros decimais mais longos, as prximas posies esquerda seriam a posio dos milhares (10 terceira potncia), a posio
dezena de milhares (10 quarta potncia), a posio das centenas de milhares (10 quinta potncia), a posio dos milhes (10 sexta
potncia), a posio das dezenas de milhes (10 stima potncia) e assim por diante.
No nmero binrio 101, o 1 mais direita escrito na posio das unidades, o 0 escrito na posio dos 2s e o 1 mais esquerda
escrito na posio dos 4s. Observe que cada posio uma potncia da base (base 2) e que essas potncias iniciam em 0 e aumentam por 1
medida que nos movemos esquerda no nmero (Figura H.4). Portanto, 101 = 22 + 20 = 4 + 1 = 5.
IV
Dgito binrio
Nome da posio
4s
2s
unidades
Valor posicional
22
21
20
Para nmeros binrios mais longos, as prximas posies esquerda seriam a posio dos 8s (2 elevado a 3), a posio dos 16s (2
elevado a 4), a posio dos 32s (2 elevado a 5), a posio dos 64s (2 elevado a 6) e assim por diante.
No nmero octal 425, dizemos que o 5 escrito na posio das unidades, o 2 escrito na posio dos 8s e o 4 escrito na posio dos
64s. Observe que cada uma dessas posies uma potncia da base (base 8) e que essas potncias iniciam em 0 e aumentam por 1 quando
movemos esquerda no nmero (FiguraH.5)
Dgito decimal
Nome da posio
64s
8s
unidades
Valor posicional
64
82
82
80
Para nmeros octais mais longos, as prximas posies esquerda seriam a posio dos 512s (8 elevado a 3), a posio dos 4096s (8
elevado a 4), a posio dos 32706s (8 elevado a 5) e assim por diante.
No nmero hexadecimal 3DA, dizemos que A escrito na posio das unidades, o D escrito na posio dos 16s e o 3 escrito na posio
dos 256s. Observe que cada uma dessas posies uma potncia da base (base 16) e que essas potncias iniciam em 0 e aumentam por 1
medida que nos movemos esquerda do nmero (FiguraH.6)
Para nmeros hexadecimais mais longos, as prximas posies esquerda seriam a posio dos 4096(s) (16 elevado a 3), a posio dos
64536s (16 elevado a 4) e assim por diante.
Dgito decimal
Nome da posio
256s
16s
unidades
Valor posicional
256
16
162
162
160
Representao binria
Representao octal
Representao hexadecimal
10
11
100
101
110
111
1000
10
1001
11
10
1010
12
11
1011
13
12
1100
14
13
1101
15
14
1110
16
15
1111
17
16
10000
20
10
Um relacionamento particularmente importante que tanto o sistema de numerao octal como o sistema de numerao hexadecimal
tm com o sistema binrio que as bases octal e hexadecimal (8 e 16 respectivamente) so potncias da base do sistema de numerao binrio (base 2). Considere o seguinte nmero binrio de 12 algarismos e seus equivalentes octal e hexadecimal. Veja se voc pode determinar
como esse relacionamento torna conveniente a abreviao de nmero binrio em octal ou hexadecimal. A resposta segue os nmeros.
Nmero binrio
Equivalente octal
Equivalente hexadecimal
100011010001
4321
8D1
Para ver como o nmero binrio facilmente convertido em octal, simplesmente divida o nmero binrio de 12 dgitos em grupos de
trs bits consecutivos cada e escreva esses grupos sobre os dgitos correspondentes do nmero octal como segue
100
4
011
3
010
2
001
1
Observe que o dgito octal que voc escreveu sob cada grupo de bits corresponde precisamente ao equivalente octal desse nmero binrio
de 3 dgitos, como mostrado na Figura H.7.
O mesmo tipo de relacionamento pode ser observado ao converter de binrio para hexadecimal. Divida o nmero binrio de 12 algarismos em grupos de quatro bits consecutivos cada e escreve esses grupos sobre os dgitos correspondentes do nmero hexadecimal como a
seguir:
1000
8
1101
D
0001
1
Observe que o dgito hexadecimal que voc escreveu sob cada grupo de quatro bits corresponde precisamente ao equivalente de hexadecimal do nmero binrio de 4 algarismos como mostrado na Figura H.3.
VI
Apndice H
Sistemas de numerao
Valores
posicionais
32
16
Valores de
smbolo
Produtos
1*32=32
1*16=16
0*8=0
1*4=4
0*2=0
1*1=1
Soma
= 32 + 16 + 0 + 4 + 0s + 1 = 53
Para converter o octal 7614 no decimal 3980, utilizamos a mesma tcnica, dessa vez utilizando valores posicionais octais apropriados,
como mostrado na Figura H.9.
Convertendo um nmero octal em decimal
Valores posicionais
512
64
Valores de smbolo
Produtos
7*512=3584
6*64=384
1*8=8
4*1=4
Soma
Para converter hexadecimal AD3B no decimal 44347, utilizamos a mesma tcnica, dessa vez utilizando valores posicionais hexadecimais apropriados, como mostrado na Figura H.10.
Convertendo um nmero hexadecimal em decimal
Valores posicionais
4096
256
16
Valores de smbolo
Produtos
A*4096=40960
D*256=3328
3*16=48
B*1=11
Soma
VII
64
32
16
32
16
Em seguida trabalhamos da coluna mais esquerda para a direta. Dividimos 32 em 57 e observamos que h um 32 em 57 com um
resto de 25, ento escrevemos 1 na coluna 32. Dividimos 16 em 25 e observamos que h um 16 em 25 com um resto de 9 e escrevemos 1 na
coluna 16. Dividimos 8 em 9 e observamos que h um 8 em 9 com um resto de 1. Cada uma das duas prximas colunas produz quocientes
de 0quando seus valores posicionais so divididos em 1, portanto escrevemos 0s nas colunas 4 e 2. Por fim, 1 em 1 1, ento escrevemos 1
na coluna 1. Isso resulta em:
Valores posicionais:
Valores de smbolo:
32
1
16
1
8
1
4
0
2
0
1
1
512
64
Ento descartamos a coluna com valor posicional 512, o que resulta em:
Valores posicionais:
64
Em seguida trabalhamos da coluna mais esquerda para a direta. Dividimos 64 em 103 e observamos que h um 64 em 103 com um
resto de 39, ento escrevemos 1 na coluna 32. Dividimos 8 em 39 e observamos que h quatro 8s em 39 com um resto de 7 e escrevemos 4 na
coluna 8. Por fim, dividimos 1 em 7 e observamos que h sete 1s em 7 sem resto, portanto ento escrevemos 7 na coluna 1. Isso resulta em:
Valores posicionais:
Valores de smbolo:
64
1
8
4
1
7
4096
256
16
Ento descartamos a coluna com valor posicional 4096, o que resulta em:
Valores posicionais:
256
16
Em seguida trabalhamos da coluna mais esquerda para a direta. Dividimos 256 em 375 e observamos que h um 256 em 375 com um
resto de 119, ento escrevemos 1 na coluna 256. Dividimos 16 em 119 e observamos que h sete 16s em 119 com um resto de 7 e escrevemos
7 na coluna 16. Por fim, dividimos 1 em 7 e observamos que h sete 1s em 7 sem resto, portanto ento escrevemos 7 na coluna 1. Isso resulta
em:
Valores posicionais:
Valores de smbolo:
256
1
16
7
1
7
VIII
Apndice H
Sistemas de numerao
Para formar o negativo de value primeiro formamos seu complemento de um aplicando o operador de complemento de bit do Java
(~) :
onesComplementOfValue = ~value;
Internamente, ~value agora value com cada um de seus bits invertidos 1s tornam-se 0s e 0s tornam-se 1s como segue:
value:
00000000 00000000 00000000 00001101
~value (i.e., complemento de uns do valor):
11111111 11111111 11111111 11110010
Para formar complemento de dois de value simplesmente adicionamos 1 ao complemento de um de value. Assim
Complemento de dois de value:
11111111 11111111 11111111 11110011
Agora se isso for de fato igual a 13, devemos ser capazes de adicion-lo ao binrio 13 e obter um resultado 0. Vamos tentar isso:
00000000 00000000 00000000 00001101
+11111111 11111111 11111111 11110011
-----------------------------------00000000 00000000 00000000 00000000
O bit de transporte que vem da coluna mais esquerda descartado e, de fato, obtemos 0 como resultado. Se adicionssemos o complemento de um nmero ao nmero, o resultado seria todos os dgitos como 1. A chave para obter um resultado de todos os dgitos como zeros
que o complemento de dois seja 1 maior que o complemento de um. A adio de 1 faz com que cada coluna adicione 0 a um transportador
de 1. O transportador continua se movendo na esquerda at que seja descartado do bit mais esquerda e, da, o nmero resultante todos
os dgitos como zero.
Os computadores na realidade realizam uma subtrao, como
x = a - value;
Suponha que a seja 27 e value seja 13 como antes. Se o complemento de dois de value for realmente o negativo de value, ento
adicionar o complemento de dois de value a a deve produzir o resultado 14. Vamos tentar isso:
a (i.e., 27)
+(~value + 1)
Resumo
IX
Resumo
Um inteiro como 19 ou 227 ou 63 em um programa Java assumido como estando no sistema de numerao decimal (base 10). Os dgitos no sistema
de numerao decimal so 0, 1, 2, 3, 4, 5, 6, 7, 8 e 9. O dgito mais baixo 0 e o dgito mais alto 9 um a menos que a base 10.
Internamente, computadores utilizam o sistema de numerao binrio (base 2). O sistema de numerao binrio tem apenas dois dgitos, 0 e 1. Seu
dgito mais baixo 0 e seu dgito mais alto 1 um a menos que a base 2.
O sistema de numerao octal (base 8) e o sistema de numerao hexadecimal (base 16) so populares principalmente porque tornam conveniente a
abreviao de nmeros binrios.
Os dgitos do sistema de numerao octal variam de 0 a 7.
O sistema de numerao hexadecimal impe um problema uma vez que ele requer dezesseis dgitos um dgito mais baixo que 0 e um dgito mais alto
com um valor equivalente ao decimal 15 (um a menos que a base 16). Por conveno, utilizamos as letras A a F para representar os dgitos hexadecimais
correspondentes aos valores decimais 10 a 15.
Cada sistema de numerao utiliza notao posicional cada posio em que um dgito escrito tem um valor posicional diferente.
Um relacionamento particularmente importante que tanto o sistema de numerao octal como o sistema de numerao hexadecimal tm com o sistema binrio que as bases octal e hexadecimal (8 e 16 respectivamente) so potncias da base do sistema de numerao binrio (base 2).
Para converter um nmero octal em um binrio, substitua cada dgito octal por seu equivalente binrio de trs dgitos.
Para converter um nmero hexadecimal em um nmero binrio, simplesmente substitua cada dgito hexadecimal por seu equivalente binrio de
quatro dgitos.
Uma vez que estamos acostumados a trabalhar com decimal, conveniente converter um nmero binrio, octal ou hexadecimal em decimal para obter
um sentido do valor real do nmero.
Para converter um nmero em decimal a partir de outra base, multiplique o equivalente decimal de cada dgito por seu valor posicional e some os
produtos.
Os computadores representam nmeros negativos utilizando a notao de complemento de dois.
Para formar o negativo de um valor em binrio, primeiro forme o complemento de um aplicando o operador de complemento de bitwise do Java (~).
Isso inverte os bits do valor. Para formar o complemento de dois de um valor, simplesmente adicione um ao complemento de um do valor.
Exerccios de autorreviso
H.1
As bases dos sistemas de numerao binrios, octais, decimais e hexadecimais so, respectivamente, _________, _________, _________ e
_________.
H.2
Em geral, as representaes decimal, octal e hexadecimal de um nmero binrio dado contm (mais/menos) dgitos que o nmero binrio.
H.3
(Verdadeiro/falso) Uma razo popular para utilizar o sistema de numerao decimal que ele forma uma notao conveniente para abreviar
nmero binrio simplesmente substituindo um dgito decimal por grupo de quatro bits binrios.
H.4
A representao (octal / hexadecimal / decimal) de um valor binrio grande a mais concisa (das alternativas dadas).
H.5
H.6
H.7
O valor posicional do dgito mais direita de qualquer nmero em octal, binrio, hexadecimal ou decimal sempre ________.
H.8
O valor posicional do dgito esquerda do dgito mais direita de qualquer nmero em octal binrio, hexadecimal ou decimal sempre igual a
________.
H.9
Preencha os valores ausentes nesse grfico de valores posicionais para as quatro posies mais direita em cada um dos sistemas de nmero
indicados:
decimal
hexadecimal
binary
octal
1000
...
...
512
100
256
...
...
10
...
...
8
1
...
...
...
10, 2, 8, 16.
Menos.
Falso. O hexadecimal faz isso.
Hexadecimal.
Falso. O dgito mais alto em qualquer base um menor que a base.
Falso. O dgito mais baixo em qualquer base zero.
1 (a base elevada potncia zero).
A base do sistema de numerao.
Preencha os valores ausentes nesse grfico de valores posicionais para as quatro posies mais direita em cada um dos sistemas de nmero
indicados:
decimal 1000 100 10 1
hexadecimal 4096 256 16 1
binary
8
4
2
1
octal
512
64
8
1
H.10
H.11
H.12
H.13
H.14
H.15
H.16
H.17
256 128 64 32 16 8 4 2 1
128 64 32 16 8 4 2 1
(1*128)+(0*64)+(1*32)+(1*16)+(0*8)+(0*4)+(0*2)+(1*1)
10110001
em octal:
512 64 8 1
64 8 1
(2*64)+(6*8)+(1*1)
261
em hexadecimal:
256 16 1
16 1
(11*16)+(1*1)
(B*16)+(1*1)
B1
H.18 Binrio:
512 256 128 64 32 16 8 4 2 1
256 128 64 32 16 8 4 2 1
(1*256)+(1*128)+(0*64)+(1*32)+(0*16)+(0*8)+(0*4)+(0*2)+(1*1)
110100001
H.19 Zero.
Exerccios
XI
Exerccios
H.20 Algumas pessoas argumentam que muitos de nossos clculos seriam mais fceis no sistema de nmeros de base 12 uma vez que 12 divisvel por
muito mais nmeros que 10 (para a base 10). Qual o dgito mais baixo na base 12? O que seria o smbolo mais alto para o dgito na base 12? Quais so
os valores posicionais das quatro posies mais direita de qualquer nmero no sistema de nmeros de base 12?
H.21 Complete o seguinte grfico de valores posicionais para as quatro posies mais direita em cada um dos sistemas de nmero indicados:
decimal
base 6
base 13
base 3
1000
...
...
27
100
...
169
...
10
6
...
...
1
...
...
...