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 32,3 3,019 = 3x10-1 + 2x10-2 = 3x10 1 + 2x10 0 + 3x10-1 = 3x10 0 + 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/2 2, 1/2 3, 1/2 4,...
Conversão Binário - Decimal A que correspondem no sistema decimal os seguintes números binários? 0,1101 2 11,001 2 = 1/2 + 1/2 2 + 1/2 4 = 0,812510 = 2 + 1 + 1/2 3 = 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,F 16 = 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,5 0,5 x 16 = 8 0,3... 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,11 2 + 100,112 1000,1 2-0,112 101,11 2 x 0,112 13,F 16 + 0,FF16 2,FF 16-1E,F16
Adição e Subtracção Números Fraccionários 1 1 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 (2 8 ). 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 -95 10 em complemento para 1? -9510 em binário é -010111112 Em complemento para 1: 111111112-010111112 = 101000002 Efectuar esta operação acaba por equivaler a inverter todos os bits
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 -108 10 é 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 -86 10 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? 11000100 2 11101011 2 00001101 2
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 + 2 2 + 2 0 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) Ignoramos o último carry! 1000001002 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) Resultado em complemento para 2!!! 001011102 (+46) + 101001012 (-91) 110100112 Convertendo temos: -01011012-4510
Números Inteiros Operações em complemento para 2 010110002 (+88) Primeiro convertemos em complemento para 2 101010002 (-88) Resultado em complemento para 2!!! 010011012 (+77) + 101010002 (-88) 111101012 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 10 0 0,12345 x 10 5 1,2345 x 10 4 0,0012345 x 10 7
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 10 7 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 Sinal Mantissa Os sinais podem ser omitidos no caso positivo! Base do Expoente Expoente
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 10 49
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 (x10 0 )
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 10 0 (acrescentou-se x 10 0 ) 2. 0,2468035 x 10 3 (deslocou-se 3 casas e aumentou-se o expoente) 3. 0,24680 x 10 3 (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 10 3 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 10 5 = 05519557-63,24 = -0,63240 x 10 2 = 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 2 14 (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 2 4 = -110102 = -2610