Você está na página 1de 11

Departamento de Informtica

Representao Binria de Nmeros


Notas de estudo

Alberto Jos Proena 01-Mar-04

Dep. Informtica, Universidade do Minho Representao Binria de Nmeros ______________________________________________________________________________________________

Parte A: Sistemas de numerao e representao de inteiros


A.1 Sistemas de numerao A.2 Converso entre bases A.3 Base hexadecimal A.4 Nmeros negativos

A.1

Sistemas de numerao

Os nmeros podem ser representados em qualquer sistema de numerao. Os seres humanos usam normalmente um sistema de numerao baseado na base 10 (com 10 dgitos diferentes). Os computadores, pelo facto de s representarem dois valores (0, 1), os dgitos binrios - tambm conhecidos por bits, da contraco do ingls binary digit - so mquinas binrias, e por isso trabalham em base 2. Para compreender o que significa a base em que os nmeros so representados num dado sistema de numerao, necessrio relembrar o significado da ordem dos dgitos. A ordem de um dgito dentro de um nmero dada pela posio que esse dgito ocupa no nmero: 0 a ordem do dgito imediatamente esquerda do ponto (vrgula) decimal, crescendo no sentido da esquerda, e decrescendo no sentido da direita. Exemplo 1532.6410 Dgito 4 - ordem -2 Dgito 6 - ordem -1 Dgito 2 - ordem 0 Dgito 3 - ordem +1 Dgito 5 - ordem +2 Dgito 1 - ordem +3

A base utilizada determina o nmero de dgitos que podem ser utilizados; por exemplo, base 10 utiliza 10 dgitos (0 a 9), base 2 utiliza 2 dgitos (0 e 1), base 5 utiliza 5 dgitos (0 a 4), base 16 utiliza 16 dgitos (0 a 9, e, A a F).

A.2

Converso entre bases

A converso de um nmero escrito na base b para a base decimal obtm-se multiplicando cada dgito pela base b elevada ordem do dgito, e somando todos estes valores. Exemplos 15326 (base 6) 3 2 1 0 1*6 + 5*6 + 3*6 + 2*6 = 41610 1532.6410 (base 10) 3 2 1 0 -1 -2 1*10 + 5*10 + 3*10 + 2*10 + 6*10 + 4*10 = 1532.6410 153213 (base 13) 3 2 1 0 1*13 + 5*13 + 3*13 + 2*13 = 308310 110110.0112 (base 2) 5 4 3 2 1 0 -1 -2 -3 1*2 + 1*2 + 0*2 + 1*2 + 1*2 + 0*2 + 0*2 + 1*2 + 1*2 = 54.37510

AJProena, Mar-04

-1-

Na converso de um nmero na base decimal para uma base b, o processo mais directo composto por 2 partes: diviso sucessiva da parte inteira desse nmero pela respectiva base, sendo os restos obtidos com cada uma dessas divises, os dgitos da base b (a comear com o menos significativo, i.e., mais junto ao ponto decimal) e os quocientes a usar na sucesso de divises; multiplicao sucessiva da parte fraccionria desse nmero pela respectiva base, sendo a parte inteira de cada um dos produtos obtidos, os dgitos da base b (a comear com o mais significativo, i.e., mais junto ao ponto decimal), e a parte decimal a usar na sucesso de multiplicaes. Exemplo 235.37510 235/2 = 117 117/2 = 58 58/2 = 29 29/2 = 14 14/2 = 7 7/2 = 3 3/2 = 1 0.375*2 = 0.750 0.75*2 = 1.5 0.5*2 = 1.0 235.37510 = 11101011.0112 Outro processo de converter de uma base decimal para outra base utiliza subtraces sucessivas, mas apenas utilizado na converso para a base binria, e mesmo nesta para valores que no ultrapassam a ordem de grandeza dos milhares e normalmente apenas para inteiros. A grande vantagem deste mtodo a sua rapidez de clculo mental, sem ajuda de qualquer mquina de calcular, desde que se saiba de cor a tabuada das potncias de 2: 2
0

Resto = 1 Resto = 1 Resto = 0 Resto = 1 Resto = 0 Resto = 1 Resto = 1 P. int. = 0 P. int. = 1 P. int. = 1

/* bit menos significativo int*/

/* bit mais significativo int*/ /* bit mais significativo frac*/ /* bit menos significativo frac*/

16

32

64

128

256

512

Ajuda tambm saber como se comportam as potncias de 2 para expoentes com mais que um dgito. 10 3 1n n 10 n Sabendo que 2 = 1024 (= 1K, ~= 10 ), e que 2 = 2 * 2 = 2 * 1K, possvel a partir daqui extrapolar 10 19 no apenas todos os restantes valores entre 2 e 2 , como ainda ter uma noo da ordem de grandeza 1 de um valor binrio com qualquer nmero de dgitos (bits) : Exemplos Tabela de potncias de 2 2
10 10

a2 2

19

11

12

13

14

15

16

17

18

19

1K

2K

4K

8K

16K

32K

64K

128K

256K

512K

Tabela de potncias de 2 com expoentes variando de 10 em 10 2


10

2
3

20

2
6

30

2
9

40

50

60

70

80

90

x0

1Kilo ~10

1Mega ~10

1Giga ~10

1Tera ~10
12

1Peta ~10
15

1Exa ~10
18

1Zeta ~10
21

1Yota ~10
24

? ~10
27

~10

3*x

Refira-se a ttulo de curiosidade, que a nomenclatura dos grandes nmeros, conforme proposta em 1948 pelo Sistema Internacional de Unidades e transporta para a Norma Portuguesa NP-18, segue a regra N dada pela expresso "10 6 12 18 elevado a 6N = (N) ilio". Daqui os seguintes termos (correspondncia): milho (10 ), bilio (10 ), trilio (10 ), 24 30 36 42 48 54 60 quadrilio (10 ), quintilio (10 ), sextilio (10 ), septilio (10 ), octilio (10 ), nonilio (10 ), decilio (10 ), ... -2AJProena, Mar-04

Dep. Informtica, Universidade do Minho Representao Binria de Nmeros ______________________________________________________________________________________________

Com base nesta informao, agora possvel pr em prtica o mtodo das subtraces sucessivas para converter um n decimal num binrio: procura-se a maior potncia de 2 imediatamente inferior ao valor do n decimal, e subtrai-se essa potncia do n decimal; o expoente da potncia indica que o n binrio ter um bit 1 nessa ordem; com o resultado da subtraco repete-se o processo at chegar ao resultado 0. Exemplo 1081.62510 1081.625 - 2 5 57.625 - 2 4 25.625 - 2 3 9.625 - 2 0 1.625 - 2 -1 0.625 - 2 -3 0.125 - 2
10

= = = = = = =

57.625 24.625 9.625 1.625 0.625 0.125 0

1 0 0 0 0 1 1 1 0 0 1. 1 0 12
10 9 8 7 6 5 4 3 2 1 0 -1 -2 3

< ordem

Os processadores utilizam um determinado nmero de bits para representar um nmero. A quantidade de bits utilizados determina a gama de valores representveis. Tal como qualquer outro sistema de numerao n - onde a gama de valores representveis com n dgitos b - a mesma lgica aplica-se representao de valores binrios. n Sendo n o nmero de bits utilizados, a gama de valores representveis em binrio, usando n bits 2 .

A.3

Base hexadecimal

O sistema de numerao de base hexadecimal (16) frequentemente utilizada como forma alternativa de representao de valores binrios, no apenas pela facilidade de converso entre estas 2 bases, como ainda pela menor probabilidade de erro humano na leitura/escrita de nmeros. Tal como referido anteriormente, so utilizados 16 dgitos: 0, 1, ..., 9, A, B, C, D, E, F. Exemplos 431210 em hexadecimal 4312 / 16 = 269 269 / 16 = 16 16 / 16 = 1 1 / 16 = 0 Logo, 431210 = 10D816 2AF316 em decimal 2 * 16 + 10 * 16 + 15 * 16 + 3 * 16 = 1099510
3 2 1 0

Resto = 8 Resto = 13 (dgito D) Resto = 0 Resto = 1

A motivao para usar hexadecimal a facilidade com que se converte entre esta base e binrio. Cada dgito hexadecimal representa um valor entre 0 e 15; cada conjunto de 4 bits representa tambm um valor no mesmo intervalo. Pode-se ento aproveitar esta caracterstica nos 2 tipos de converso: de binrio, agrupando os bits de 4 em 4 a partir do ponto decimal, e convertendo-os; para binrio, convertendo cada dgito hexadecimal em 4 bits.

AJProena, Mar-04

-3-

Exemplos

2 A F (hexadecimal) 0010 1010 1111 (binrio)


2AF16 = 0010101011112

1101 0101 1011 (binrio) D 5 B (hexadecimal)


1101010110112 = D5B16 (tambm comum representar como 0xD5B, ou ainda 0xd5b )

A.4

Nmeros negativos

Os computadores lidam com nmeros positivos e nmeros negativos, sendo necessrio encontrar uma representao para nmeros com sinal negativo. Existe uma grande variedade de opes, das quais apenas se destacam 4, sendo apenas 3 as actualmente usadas para representar valores negativos: sinal e amplitude/magnitude (S+M) complemento para 1 complemento para 2 notao em excesso (ou biased)

Como o prprio nome indica, a representao sinal e amplitude utiliza um bit para representar o sinal, o bit mais esquerda: 0 para indicar um valor positivo, 1 para indicar um valor negativo. Na representao em complemento para 1 invertem-se todos os bits de um nmero para representar o seu complementar: assim se converte um valor positivo para um negativo, e vice-versa. Quando o bit mais esquerda 0, esse valor positivo; se for 1, ento negativo. Exemplo 10010 = 011001002 (com 8 bits) Invertendo todos os bits: 100110112 = 10010

O problema desta representao que existem 2 padres de bits para o 0. Nomeadamente 010 = 000000002 = 111111112. A soluo encontrada consiste em representar os nmeros em complemento para 2 . Para determinar o negativo de um nmero negam-se todos os seus bits e soma-se uma unidade. Exemplo 10010 = 011001002 (com 8 bits) Invertendo todos os bits: 100110112 Somando uma unidade : 100110112 + 1 = 100111002 = 10010

A representao em complemento para 2 tem as seguintes caractersticas: o bit da esquerda indica o sinal;
-4AJProena, Mar-04

Dep. Informtica, Universidade do Minho Representao Binria de Nmeros ______________________________________________________________________________________________

o processo indicado no pargrafo anterior serve para converter um nmero de positivo para negativo e de negativo para positivo; o 0 tem uma representao nica: todos os bits a 0; a gama de valores que possvel representar com n bits -2 Exemplo Qual o nmero representado por 111001002 (com 8 bits)? Como o bit da esquerda 1 este nmero negativo. Invertendo todos os bits: 000110112 Somando uma unidade : 000110112 + 1 = 000111002 = 2810 Logo: 111001002 = 2810
n-1

... 2

n-1

-1.

Como que se converte um nmero representado em complemento para 2 com n bits, para um nmero representado com mais bits? Resposta: basta fazer a extenso do sinal! Se o nmero positivo acrescenta-se 0's esquerda, se o nmero negativo acrescenta-se 1's esquerda. Exemplo Representar os seguintes nmeros (de 8 bits) com 16 bits: 011010102 Positivo, logo: 00000000 011010102 110111102 Negativo, logo: 11111111 110111102

A multiplicao e a diviso tm algoritmos algo complexos que ultrapassam o mbito destas notas de estudo. No entanto a multiplicao e a diviso por potncias de 2 realizam-se efectuando deslocamentos de bits direita ou esquerda, respectivamente. Fazer o deslocamento esquerda uma vez - num nmero binrio - corresponde a multiplicar por 2, duas 2 3 vezes corresponde a multiplicar por 4 (= 2 ), 3 vezes corresponde a multiplicar por 8 (= 2 ), e assim sucessivamente. O mesmo se aplica diviso com o deslocamento direita. Exemplo Dividir 110010102 (= 20210 ) por 4: Deslocar direita 2 vezes: 000110010.12 = 50.510 Multiplicar 0000010102 (= 1010 ) por 8. Deslocar esquerda 3 vezes: 0010100002 = 8010 Esta regra tambm se aplica aos nmeros em complemento para 2 desde que se mantenha o sinal.
AJProena, Mar-04 -5-

A ltima notao referida no incio - notao em excesso tem uma vantagem sobre qualquer outra referida anteriormente: a representao numrica dos valores em binrio, quer digam respeito a valores com ou sem sinal, tem o mesmo comportamento na relao entre eles. Por outras palavras, o valor em binrio com todos os bits a 0 representa o menor valor inteiro, quer este tenha sinal ou no, e o mesmo se aplica ao maior valor em binrio, i.e., com todos os bits a 1: representa o maior inteiro, com ou sem sinal. Exemplo Binrio (8 bits) Sinal + Ampl +1 Compl p/ 1 +1 Compl p/ 2 +1 Excesso (128) -127

0000 000012 ... 1000 000012 ... 1111 111102

-1

-126

-127

+1

-126

-1

-2

+126

Como o prprio nome sugere, esta codificao de um inteiro (negativo ou positivo) em binrio com n bits n-1 n-1 feita sempre em excesso (de 2 ou 2 -1). Neste exemplo com 8 bits, o valor +110 representado em n-1 binrio, em notao por excesso de 2 , pelo valor (+110 + excesso) = (+110 + 12810) = (0000 000012 + 1000 000002) = 1000 000012. A tabela que a seguir se apresenta, representando todas as combinaes possveis com 4 bits, ilustra de modo mais completo as diferenas entre estes 4 modos (+1 variante) de representar inteiros com sinal. Binrio (4 bits) Sinal + Ampl Compl p/ 1 0 1 2 3 4 5 6 7 -7 -6 -5 -4 -3 -2 -1 -0 Compl p/ 2 0 1 2 3 4 5 6 7 -8 -7 -6 -5 -4 -3 -2 -1 Excesso (7) -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 Excesso (8) -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7

0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111

0 1 2 3 4 5 6 7 -0 -1 -2 -3 -4 -5 -6 -7

-6-

AJProena, Mar-04

Dep. Informtica, Universidade do Minho Representao Binria de Nmeros ______________________________________________________________________________________________

Parte B: Representao de reais em vrgula flutuante


B.1 Notao cientfica B.2 Normalizao na representao B.3 Intervalo e preciso de valores representveis B.4 Formato binrio dum valor em fp B.5 O bit escondido B.6 A norma IEEE 754 para valores em fp

B.1

Notao cientfica

A representao de um valor infinito de valores usando uma mquina finita vai obrigar a assumir um conjunto de compromissos, os quais, no caso dos reais, iro afectar no s a gama de valores representveis, como ainda a sua preciso. A utilizao da notao cientfica, do tipo: Valor = ( -1 ) * Mantissa * Radix
S Exp

ainda aquela que permite obter a melhor representao de um n. real em vrgula flutuante (ou fp na terminologia inglesa) com um n. limitado de dgitos. O valor do radix de 10 na representao decimal, e pode ser 2 ou uma potncia de 2 na representao interna num computador. A IBM usava nos seus mainframes um radix de 16, pois permitia-lhe aumentar o intervalo de representao de valores; contudo os problemas que tiveram com esta representao deram mais fora utilizao do valor 2 como radix.

B.2

Normalizao na representao

A notao cientfica permite que um mesmo n. possa ser representado de vrias maneiras com os mesmos dgitos (por ex., 43.789E+12 , .43789E14, 43789E+09). Para facilitar a sua representao - omitindo a necessidade de representar o ponto/vrgula decimal - impe-se a adopo de uma norma de representao, e diz-se que um dado n. fp est normalizado quando cumpre essa norma. Alguns autores consideram que um n. est normalizado quando a mantissa (ou parte fraccionria, F) se encontra no intervalo ]Radix , 1]. Por outras palavras, existe sempre um dgito diferente de 0 esquerda do ponto decimal. Num exemplo em decimal com 7 algarismos na representao de fp (5 para a mantissa e 2 para o expoente), o intervalo de representao dum fp normalizado, seria em valor absoluto [1.0000E-99, 9.9999E+99] . Existe aqui um certo desperdcio na representao de fp usando 7 algarismos, pois fica excludo todo o intervalo [0.0001E-99, 1.0000E-99[ . Para se poder optimizar a utilizao dos dgitos na representao de fp, aceitando a representao de valores menores que o menor valor normalizado, mas com o menor valor possvel do expoente, se designa esta representao de desnormalizada. Todas as restantes representaes designam-se por no normalizadas.

B.3

Intervalo e preciso de valores representveis

Pretende-se sempre com qualquer codificao obter o maior intervalo de representao possvel e simultaneamente a melhor preciso (relacionada com a distncia entre 2 valores consecutivos). Existindo um n. limitado de dgitos para a representao de ambos os valores - F e Exp - h que ter conscincia das consequncias de se aumentarem ou diminurem cada um deles. O intervalo de valores representveis depende essencialmente do Exp, enquanto a preciso vai depender do nmero de dgitos que for alocado para a parte fraccionria, F. Numa representao em binrio, a dimenso mnima a usar para fp (que ser sempre um mltiplo da dimenso da clula) dever ser pelo menos 32. Se fosse 16, 1 bit seria para o sinal, e os restantes 15 seriam insuficientes mesmo para representar apenas a parte fraccionria (daria uma preciso de 1 em cerca de 32 000...).
AJProena, Mar-04 -1-

Usando 32 bits para representao mnima de fp, torna-se necessrio encontrar um valor equilibrado para a parte fraccionria e para o expoente. Esse valor 8 para o expoente - permite representar uma gama da 39 ordem de grandeza dos 10 - e pelo menos 23 para a parte fraccionria - permite uma preciso equivalente a 7 algarismos decimais.

B.4

Formato binrio dum valor em fp

Existem 3 campos a representar nos 32 bits dum valor em fp: o sinal (1 bit), a parte fraccionria (23 bits) e o expoente (8 bits). Para se efectuar qualquer operao aritmtica estes 3 campos tero de ser identificados e separados para terem um tratamento distinto na unidade que processa os valores em fp. A ordem da sua representao (da esquerda para a direita) segue uma lgica: sinal, S: ficando mais esquerda, permite usar o mesmo hardware (que trabalha com valores inteiros) para testar o sinal de um valor em fp; expoente, E: ficando logo a seguir vai permitir fazer comparaes quanto grandeza relativa entre valores absolutos em fp, sem necessidade de separar os 3 campos: basta comparar os valores como se de valores meramente binrios se tratassem; parte fraccionria, F: o campo mais direita.

B.5

O bit escondido

Um valor normalizado tem sempre um dgito diferente de zero esquerda do ponto decimal. Se o sistema de numerao decimal, esse dgito pode ser um de entre 9 possveis; se o sistema de numerao binrio, esse dgito s pode ser um. Assim, e apenas na representao binria normalizada, esse dgito esquerda do ponto decimal toma sempre o mesmo valor, e um desperdcio do espao de memria estar a represent-lo fisicamente. Ele apenas se torna necessrio para efectuar as operaes, permanecendo escondido durante a sua representao. Ganha-se um bit para melhorar a preciso, permitindo passar para 24 o n. de bits da parte fraccionria (numa representao com 32 bits).

B.6

A norma IEEE 754 para valores em fp

A representao de valores em fp usando 32 bits e com o formato definido anteriormente permite ainda vrias combinaes para representar o mesmo valor. Por outro lado, no ficou ainda definido como representar os valores desnormalizados, bem como a representao de valores externos ao intervalo permitido com a notao normalizada. A norma IEEE 754 define com clareza estas imprecises, permitindo uma maior compatibilidade ao nvel dos dados no porte de aplicaes entre sistemas que adoptem a mesma norma. De momento todos os microprocessadores disponveis comercialmente com unidades de fp suportam a norma IEEE 754 no que diz respeito aos valores de 32 bits. Aspectos relevantes na norma IEEE 754: representao do sinal e parte fraccionria: segue o formato definido anteriormente, sendo a parte fraccionria representada sempre em valor absoluto, e considerando o bit escondido na representao normalizada; representao do expoente: para permitir a comparao de valores em fp sem separao dos campos, a codificao do expoente deveria ser tal que os valores menores de expoente (os negativos) tivessem uma representao binria menor que os valores positivos (e maiores); as codificaes usando complemento para 1 ou 2, ou ainda a representao usando sinal+amplitude, no possuem este comportamento, i.e., os valores negativos tm o bit mais significativo ( esquerda) igual a 1, o que os torna, como nmeros binrios, maiores que os nmeros positivos; a notao que satisfaz este requisito uma notao por excesso, na qual se faz um deslocamento na n-1 gama de valores decimais correspondentes ao intervalo de representao de n bits, de 0 a 2 , de modo a que o 0 decimal passe a ser representado no por uma representao binria com tudo a zero, mas por um valor no meio da tabela; usando 8 bits por exemplo, esta notao permitiria representar o 0 pelo valor 127 ou 128; a norma IEEE adoptou o primeiro destes 2 valores, pelo que a representao do expoente se faz por notao por excesso 127; o expoente varia assim entre -127 e +128; valor decimal de um fp em binrio (normalizado): V = (-1)
S

-2-

* (1.F) * 2

E-127

, em que S, F e E
AJProena, Mar-04

Dep. Informtica, Universidade do Minho Representao Binria de Nmeros ______________________________________________________________________________________________

representam respectivamente os valores em binrio dos campos no formato em fp; representao de valores desnormalizados: para poder contemplar este tipo de situao a norma IEEE reserva o valor de E = 0000 00002 para representar valores desnormalizados, desde que se S -126 verifique tambm que F 0; o valor decimal vem dado por V = (-1) * (0.F) * 2 representao do zero: o caso particular previsto em cima, onde E = 0 e F = 0 ; representao de : a norma IEEE reserva a outra extremidade de representao do expoente; quando E = 1111 11112 e F = 0 , so esses os "valores" que se pretendem representar; representao de n. no real: quando o valor que se pretende representar no um n. real (imaginrio por exemplo), a norma prev uma forma de o indicar para posterior tratamento por rotinas de excepo; neste caso E = 1111 11112 e F 0 .

A norma IEEE 754 contempla ainda a representao de valores em fp que necessitem de maior intervalo de representao e/ou melhor preciso, por vrias maneiras. A mais adoptada pelos fabricantes utiliza o dobro do n. de bits, 64, pelo que tambm conhecida pela representao em preciso dupla, enquanto a representao por 32 bits se designa por preciso simples. Para preciso dupla, a norma especifica, entre outros aspectos, que o expoente ser representado por 11 bits e a parte fraccionria por 52 bits.

Representao de reais com preciso simples (a) e dupla (b)

AJProena, Mar-04

-3-