Você está na página 1de 75

Representação de

Dados
Introdução

• Todos sabemos que existem diferentes


tipos de números: fraccionários, inteiros
positivos e negativos, etc.
• Torna-se necessária a representação destes
dados em sistema binário para utilização no
computador.
Números Fraccionários
Representação de Dados
Números Fraccionários

• Os números fraccionarios podem ser


expressos em potências de 10, tal como os
números inteiros.
• Neste caso as potências de 10 têm
expoente negativo.
Representação de Dados
Números Fraccionários

0,27315
Representação de Dados
Números Fraccionários

0,27315
0,2 + 0,07 + 0,003 + 0,0001 + 0,00005
ou
2 x 0,1 + 7 x 0,01 + 3 x 0,001 + 1 x 0,0001 + 5 x 0,00001
ou
2 x 10-1 + 7 x 10-2 + 3 x 10-3 + 1 x 10-4 + 5 x 10-5
Representação de Dados
Números Fraccionários
Como se representam os seguintes
números em desenvolvimento de
potências de 10?

• 0,32 = 3x10-1 + 2x10-2


• 32,3 = 3x101 + 2x100 + 3x10-1
• 3,019 = 3x100 + 0x10-1 + 1x10-2 + 9x10-3
Conversão de Números
Fraccionários
Conversão
Binário - Decimal

• Na conversão de binário para decimal,


importa apenas ter em conta que os
números a converter serão potências de 2
com expoente negativo:
〪2 -1, 2-2, 2-3, 2-4, ... ou 1/2, 1/22, 1/23, 1/24, ...
Conversão
Binário - Decimal

A que correspondem no sistema decimal


os seguintes números binários?

• 0,11012 = 1/2 + 1/22 + 1/24 = 0,812510


• 11,0012 = 2 + 1 + 1/23 = 3,12510
Conversão
Decimal - Binário

• A conversão de decimal para binário


também segue o mesmo procedimento
usado para o caso de números inteiros.
〪 No método das potências é só ter em conta as
potências de expoente negativo.
〪 No método das divisões existe uma diferença
importante. Em vez de sucessivas divisões vamos
trabalhar com multiplicações e em vez de usar os
“restos” vamos usar as partes inteiras resultantes.
Conversão
Decimal - Binário

0,625 0,625 x 2 = 1,25 0,1...

0,25 0,25 x 2 = 0,5 0,10...

0,5 0,5 x 2 = 1,00 0,101

0,62510 = 0,1012
Conversão
Decimal - Binário

• O processo termina quando a parte


decimal for zero.
• A conversão para decimal pode implicar
uma fracção binária infinita.
〪 Neste caso deveremos terminar a conversão quando
o número de dígitos significativos pedido for
alcançado.
Conversão
Decimal - Binário

0,67 0,67 x 2 = 1,34 0,1...

0,34 0,34 x 2 = 0,68 0,10...

0,68 0,68 x 2 = 1,36 0,101...

0,36 0,36 x 2 = 0,72 0,1010...


Conversão
Decimal - Binário

0,36 0,36 x 2 = 0,72 0,10100...

0,72 0,72 x 2 = 1,44 0,101001...

0,44 0,44 x 2 = 0,88 0,1010010...

... continuaria indefinidamente


Conversão
Hexadecimal - Decimal

• Os números fraccionários hexadecimais


também são expressos em potências de
expoente negativo.
• 0,F16 = 15 x 16-1 = 15 x 1/16 = 0,937510
Conversão
Decimal - Hexadecimal

• Para converter fracções decimais usa-se um


método semelhante ao visto anteriormente,
multiplicando por 16.

• A parte inteira de cada multiplicação é um


dígito hexadecimal do novo número. O
critério de paragem é o número de dígitos
significativos que queremos.

Este procedimento vai portanto ser semelhante


para qualquer base que se queira analisar!
Conversão
Decimal - Hexadecimal

0,625 0,625 x 16 = 10 0, A

0,62510 = 0,A16

0,21875 0,21875 x 16 = 3,5 0,3...

0,5 0,5 x 16 = 8 0,38

0,2187510 = 0,3816
Conversão
Binário - Hexadecimal

• Tal como nos números inteiros, também


nos fraccionários conseguimos uma
conversão simples entre binários e
hexadecimais.
• Importa apenas salientar qu no caso da
parte fraccionária os bits agrupam-se da
esquerda para a direita.
Conversão
Binário - Hexadecimal

1001101,101111

410 1310 1110 310

4D,B316
Conversão
Hexadecimal - Binário

C 9 ,1 B
11002 10012 00012 10112

C9,1B16 =11001001,000110112
Adição e Subtracção de
Números Fraccionários
Adição e Subtracção
Números Fraccionários

• As operações aritméticas com números


fraccionários binários e hexadecimais
seguem as mesmas regras que as
operações aritméticas com números
decimais.
Adição e Subtracção
Números Fraccionários

Qual será o resultado das seguintes


operações?

• 1001,112 + 100,112
• 1000,12 - 0,112
• 101,112 x 0,112
• 13,F16 + 0,FF16
• 2,FF16 - 1E,F16
Adição e Subtracção
Números Fraccionários

11 1
1001,112
+ 0100,112
1110,102

* ** * *
1000,102
- 0000,112
0111,112
Adição e Subtracção
Números Fraccionários

101,112
* 000,112
10111
+ 10111
1000101
O número de casas
decimais é a soma do
número de casas decimais
dos dois operandos!

100,01012
Adição e Subtracção
Números Fraccionários

1
13,F016
+ 00,FF16
14,EF16

* *
1E,F016
-02,FF16
1B,F116
Números Inteiros
Com e Sem Sinal
Números Inteiros
Sem Sinal - BCD

• Em aplicações de output digital são usados


códigos de representação decimal. Um dos
códigos mais conhecidos é o BCD (Binary
Coded Decimal).
• Este código usa os primeiros 10 números
do sistema binário para codigicar os 10
dígitos decimais.
Números Inteiros
Sem Sinal - BCD

• A diferença entre o sistema binário de o


código BCD só se faz sentir a partir do
número decimal 9, uma vez que no código
BCD os números decimais não são
tratados no seu conjunto, mas sim dígito a
dígito.
Números Inteiros
Sem Sinal - BCD

279510
BCD:
0010011110010101

Conversão Binária:
101011101011
Números Inteiros
Com Sinal - Sinal de Grandeza

• Estamos habituados a representar números


positivos e negativos com os sinais “+” e
“-”. No entanto, no computador apenas
dispomos dos símbolos 0 e 1, como já
vimos.
• Uma das formas de representar o sinal é o
que normalmente se designa sinal de
grandeza.
Números Inteiros
Com Sinal - Sinal de Grandeza

• Na representação com sinal de grandeza, o


bit mais significativo é reservado para
indicar o sinal.
〪 Bit mais significativo a 0 - número positivo
〪 Bit mais significativo a 1 - número negativo
Números Inteiros
Com Sinal - Sinal de Grandeza

• Quando falávamos em inteiros positivos


conseguíamos com 1 byte (8 bits)
representar 256 números positivos
diferentes (28).
• Ao reservar-se o número mais significativo
ficamos apenas com 7 bits o que faz com
que consigamos representar apenas 128
números positivos e 128 negativos.
Números Inteiros
Com Sinal - Sinal de Grandeza

• Alguns inconvenientes são:


〪 Necessidade de um bit adicional, mesmo que
estejamos só a lidar com números positivos;
〪 Existem duas representações para a mesma
quantidade (+0 e -0);
〪 As operações são muito complexas.
Números Inteiros
Com Sinal - Complemento para 2

• Para evitar o sinal surgiram outras formas


de representação. Por exemplo o
complemento para 9, usada para
representar números positivos e negativos
na base 10.
Números Inteiros
Com Sinal - Complemento para 2

• Com 3 dígitos podemos representar


números de 000 a 999 em decimal (1000
números). Procedemos à seguinte divisão:
〪 Os primeiros 500 são os positivos (de 0 a 499)
〪 Os restantes 500 são os negativos (de 500 a 999).
Aqui dizemos que o número negativo é obtido
subtraíndo do valor a 999. Por exemplo o 863
corresponde ao -136 (999 - 863 = 136)
Números Inteiros
Com Sinal - Complemento para 2

• Em binário o princípio é o mesmo mas


chamado de complemento para 1.
• Usando 8 bits temos:
〪 De 00000000 a 01111111 são números positivos
〪 De 10000000 a 11111111 são números negativos
Números Inteiros
Com Sinal - Complemento para 2

• Como proceder para converter -9510 em


complemento para 1?

-9510 em binário é -010111112

Em complemento para 1:
Efectuar esta operação
111111112 - 010111112 acaba por equivaler a
inverter todos os bits
= 101000002
Números Inteiros
Com Sinal - Complemento para 2

• Uma das limitações dos complementos para


9 e para 1 é que continuamos a ter uma
representação redundante para a quantidade
0 (+0 e -0)
• Os complementos para 10 e para 2 resolvem
este problema.
Números Inteiros
Com Sinal - Complemento para 2

• A representação em complemento para 10


e complemento para 2 é obtida
adicionando 1 unidade no caso de números
negativos.
• Assim, o número -10810 é representado:
〪 em complemento para 9: 801 (999-108)
〪 em complemento para 10: 802 (1000-108)
Números Inteiros
Com Sinal - Complemento para 2

• Mais uma vez, em binário, a situação é em


tudo semelhante. A representação em
complemento para 2 pode ser obtida pela
inversão do seu valor (complemento para
1) acrescido de uma unidade.
Números Inteiros
Com Sinal - Complemento para 2

• Como proceder para converter -8610 em


complemento para 2?

-8610 em binário é -010101102

Em complemento para 1:101010012


Em complemento para 2:101010102
(10101001+1 = 10101010)
Números Inteiros
Com Sinal - Complemento para 2

• Qual será o valor decimal dos seguintes


números sabendo que estão representados
em complemento para 2?

• 110001002
• 111010112
• 000011012
Números Inteiros
Com Sinal - Complemento para 2

11000100
-
Inverter

- 0111011
+1

- 0111100 - 6010
Números Inteiros
Com Sinal - Complemento para 2

11101011
-
Inverter

- 0010100
+1

- 0010101 - 2110
Números Inteiros
Com Sinal - Complemento para 2

00001101
+

No caso do número ser


positivo então a conversão
é feita directamente!

2 3+ + 22 20

8 + 4 + 1 = 13
Números Inteiros
Operações em complemento para 2

• As adições são sempre feitas da mesma


maneira, independentemente do sinal das
parcelas. A soma é feita de forma normal sendo
que um “carry” (transporte) final é ignorado.

• É importante notar que, se numa soma onde o


bit de sinal das parcelas é igual e o resultado
tem sinal contrário ocorre um “overflow”, ou
seja, ultrapassou-se a capacidade de
representação de valores daquele número de
bits.
Números Inteiros
Operações em complemento para 2

Qual o resultado das seguintes


operações?

• 00001101 (+13) + 11110111 (-9)


• 11110011 (-13) + 00001001 (+9)
• 11110011 (-13) + 11110111 (-9)
Números Inteiros
Operações em complemento para 2

000011012 (+13)
+ 111101112 (-9)
1000001002
Ignoramos o
último carry!

410
Números Inteiros
Operações em complemento para 2

111100112 (-13)
+ 000010012 (+9)
111111002
-
Inverter

-0000011
+1

-0000100
-410
Números Inteiros
Operações em complemento para 2

111100112 (-13)
+ 111101112 (-9)
1111010102
-
Inverter

-0010101
+1

-0010110
-2210
Números Inteiros
Operações em complemento para 2

• Desta forma descobrimos um novo método


para subtrair números binários. Para subtrair X
a Y basta somar X com o complemento para 2
de Y, que é particularmente útil quando X < Y.

• Qual será o resultado das seguintes operações?


〪 00101110 (46) - 01011011 (91)
〪 01001101 (77) - 01011000 (88)
Números Inteiros
Operações em complemento para 2

010110112 (+91)
Primeiro convertemos em
complemento para 2

101001012 (-91)

001011102 (+46)
Resultado em + 101001012 (-91)
complemento 110100112
para 2!!!
Convertendo temos: -01011012 -4510
Números Inteiros
Operações em complemento para 2

010110002 (+88)
Primeiro convertemos em
complemento para 2

101010002 (-88)

010011012 (+77)
Resultado em + 101010002 (-88)
complemento 111101012
para 2!!!
Convertendo temos: -00010112 -1110
Representação de
Números em Vírgula
Flutuante
Introdução
Notação Científica

• Consideremos o número decimal 12345. Sem


alterarmos o valor podemos representá-lo de
diversas formas:
〪1234 x 100
〪0,12345 x 105
〪1,2345 x 104
〪0,0012345 x 107
Introdução
Notação Científica

• As representações anteriores não implicam


perda de precisão. No entanto, a representação
0,00123 x 107 traduz-se num sacrifício de dois
dígitos de precisão.

• Este tipo de representação é designada de


notação exponencial ou notação científica.
Introdução
Notação Científica
Sinal do
Expoente

+0.12345 x 10 +20

Expoente
Sinal Mantissa
Base do
Expoente
Os sinais podem ser
omitidos no caso positivo!
Representação de Números
em Vírgula Flutuante

• Tal como os números inteiros, também os


números de vírgula flutuante são armazenados e
manipulados de acordo com um “standard”.

• Um múltiplo de 8 bits é usado como “palavra”.


Se tivermos um número decimal representado
por 7 dígitos decimais e um para sinal:
SMMMMMMMMM
Representação de Números
em Vírgula Flutuante

• Este formato permite representar qualquer


inteiro na seguinte gama:
-9999999 < número < +9999999

• No caso da vírgula flutuante, uma representação


pode ser:
SEEMMMMM
Representação de Números
em Vírgula Flutuante

-0.91003 x 10 20

S MMMMM EE
Representação de Números
em Vírgula Flutuante

• Neste formato, ao utilizarmos dois dígitos para


o expoente ficamos com falta de um dígito para
representar o sinal do expoente, a menos que
abdicássemos de um deles.

• Uma forma comum de ultrapassar esta questão


consiste em utilizar uma representação
designada por excesso para 50.
Vírgula Flutuante
Excesso para 50

• Nesta representação 50 corresponde ao valor 0


no expoente. Para baixo de 50 estão os
negativos e para cima os positivos.

• Assim, 46 representa um expoente de -4 e 53


representa um expoente de 3.

• Assim, com a notação SEEMMMMM e utilizando


excesso para 50, os valores representados
serão:
-0,99999 x 10-50 < número < 0,99999 x 1049
Vírgula Flutuante
Normalização

• A normalização tem por objectivo maximizar a


precisão possível, procurando-se armazenar os
números com menor número possível de zeros
“à esquerda”.

• Com a representação SEEMMMMM, a


normalização pode ser feita da seguinte forma:
1. Se o número não tem um exponente, colocar expoente
zero (x100)
Vírgula Flutuante
Normalização

2. Deslocar a parte decimal para a esquerda ou direita,


aumentando ou diminuindo o expoente por forma a
colocar o ponto decimal na posição correcta.
3. Corrigir a precisão, através da eliminação de dígitos ou
adição de zeros no final.
4. Mudar a notação do expoente para excesso para 50.
Vírgula Flutuante
Normalização

• Exemplo: Normalizar 246,8035


1. 246,8035 x 100 (acrescentou-se x 10 ) 0

2. 0,2468035 x 103 (deslocou-se 3 casas e aumentou-se o expoente)


3. 0,24680 x 103 (precisão para 5 dígitos)
4. O expoente 3 em excesso para 50 é 53.

• Resultado final: 05324680


Vírgula Flutuante
Normalização

• Quais serão os valores a que correspondem os


seguintes números representados na notação
SEEMMMMM com expoente em excesso para
50? O sinal é 0 para positivo e 5 para negativo.
〪05324657
〪54810000
〪04925000
Introdução
Notação Científica

〪05324657 = 0,24657 x 103


〪54810000 = -0,1 x 10-2
〪04925000 = 0,25 x 10-1
Vírgula Flutuante
Normalização

• Usando o mesmo formato qual será a


representação SEMMMMM dos seguintes
números decimais?
〪19557
〪-63,24
〪-0,0234567
Vírgula Flutuante
Normalização

〪19557 = 0,19557 x 105 = 05519557


〪-63,24 = -0,63240 x 102 = 55263240
〪-0,0234567 = -0,23456 x 10-1 = 54923456
Vírgula Flutuante
Normalização Binária

• As regras vistas anteriormente para o sistema


decimal podem ser aplicadas ao sistema binário.

• Um dos formatos mais comuns está associado à


norma IEEE 754, para 32 e 64 bits.

• A representação para 32 bits é chamada de


precisão simples e usa 1 bit para sinal, 8 bits
para expoente e 23 bits para a mantissa.
Vírgula Flutuante
Normalização Binária

• A precisão simples apresenta ainda as seguintes


especificidades:

• O expoente é representado em excesso de


127; (127 + expoente)

• Utilizando os 23 bits de mantissa pode-se


representar 24 bits como os números
normalizados começam sempre por 1 esse bit
nao é representado mas está implícito!!
Vírgula Flutuante
Normalização Binária

• Exemplo: Representar 25375 em IEEE 754


precisão simples (32 bits).
1. 110001100011111(conversão para binário)
2. 1,10001100011111 x 214 (deslocou-se até obter “1.___”)
3. 14 + 127 = 141 (excesso de 127 em base 10, que equivale a
10001101 em binário)

4. Ignora-se o 1 à esquerda do ponto.

• Resultado:
01000110110001100011111000000000
Vírgula Flutuante
Normalização Binária

• Exemplo: Converter para decimal sabendo que


está representado em IEEE 754, com 32 bits:
110000011101000000000000000000002
1. Sinal: 1, logo é negativo
2. Expoente: 100000112 = 13110 em excesso de 127, logo
será expoente de 410
3. Mantissa: 10100000000000000000000

• Resultado: -1,0102 x 24 = -110102 = -2610

Você também pode gostar