Representações de caracteres Sistemas de Numeração • A necessidade de contar é algo que acompanha o ser humano desde tempos imemoriais. Sistemas de Numeração • Usando o polegar para indicar em cada dedo a falange, falanginha e falangeta, e assim, cada dedo podia contar 3 números, possibilitando a contagem de 12 números em cada mão. Sistemas de Numeração • A posição do algarismo no número indica o valor que ele representa. Sistemas de Numeração • Sistema de numeração na base 10 Sistemas de Numeração • Sistema de numeração na base 5 Sistemas de Numeração • Sistema de numeração na base 2 Sistemas de Numeração • Sistema de numeração na base 16 Sistemas de Numeração • Sistema de numeração na base 16 Representação de letras As letras são representadas como números dentro da memória. Existem vários padrões para associar letras a números: ASCII BAUDOT ECMA LATIN 1 etc. - IBM 850 - EBCDIC - UNICODE ASCII Alguns códigos (base 16) 00 a 1F controle de equipamentos Ex. 0D - fim de linha (CR - carriage return) Ex. 0A - passar para próxima linha (LF - line feed) 20 - espaço em branco 30 a 39 - dígitos de 0 a 9 41 a 5A - alfabéticos maiúsculos 61 a 7A - alfabéticos minúsculos UNICODE Representação ASCII é insuficiente para todos os alfabetos UNICODE - código que englobará todas as línguas -> internacionalização de programas 16 bits início dele (256 posições) - igual ao ISO-Latin básico - usado no Windows do Brasil em particular 128 primeiras = ASCII Números de Ponto Flutuante em Base 10 Números de ponto flutuante permitem que números muito grandes e muito pequenos sejam representados usando poucos dígitos, às custas da precisão. Grosseiramente falando, a precisão é determinada pelo número de dígitos significativos, e o intervalo é determinado pelo número de dígitos no expoente. Ex. 6,023 x 1025 Normalização 25410 pode ser representado em ponto flutuante: 254 x 100 25,4 x 101 2,54 x 102 etc... Os números de ponto flutuante estão normalmente normalizados, em que o ponto é localizado em uma só posição possível para um número dado. 0,254 x 103 é a forma mais usada Exemplo em ponto flutuante Representar o número 0,254 x 103 na base 8 Formato do resultado: Normalizado Sinal (0 - positivo, 1 = negativo) Expoente: 3 bits, usando excesso de 4 4 dígitos octais Vamos tentar resolver ? Solução do exercício (1) Transforme o número em octal, usando o método da divisão. Para poupar trabalho, converta o número 254 x 100 e assim você não precisará converter as decimais pelo método da multiplicação. Você achará o número 376 x 80 Solução do exercício (2) Normalize 3768 x 80 = 0,376 x 83 O expoente é 3, com excesso de 4 = 7 Então o resultado final é esquematicamente +7.3760 ou seja, em binário 0 111 011 111 110 000 Números em ponto flutuante em binário Formato padronizado: IEEE 754 1 bit de sinal 8 bits de expoente, deslocamento de 127 normalização: mantissa = 1,xxxxx 1.0 <= mantissa < 2 mantissa “virtual” de 24 bits 23 representados o mais significativo escondido = 1 Conversão PF para decimal Sinal -> número é positivo ou negativo Expoente: subtrair 127 se positivo, só eliminar o bit 7 e somar 1 Mantissa: considerar que o número seja 1,abcde... Multiplique a por 1/2 Multiplique b por 1/4 c por 1/8 etc... some Exemplo 0 10000110 10100000000000000000 0 -> número é positivo 10000101 - 01111111 = 00000110 = 610 mantissa = 1,1010000... 1 + 1 x 1/2 + 0 x 1/4 + 1 x 1/8 = 1,62510 resposta: 1,625 x 106 ou 0,1625 x 107 Conversão binária para PF Converta o valor absoluto do número decimal para binário, como já foi visto Normalize o número para que a mantissa seja algo como 1,xxxxxx assim será gerado o expoente remova este primeiro bit 1 da mantissa Some o expoente a 127 O número final terá a forma 1 bit Sinal 8 bits Expoente 23 Mantissa Exemplo 13,5 decimal 13 = 11012 0,5 = 0,12 logo: 1101,1 na base 2 normalizo: 1,1011 x 23 expoente do ponto flutuante -> somar 127 Em ponto flutuante 0 10000010 10110000000000000000000 Convenções especiais em PF 0 = seria impossível (já que o bit mais significativo seria sempre 1). Elimina-se o expoente -127 0 = 00000000000000000000000000000000 ou 10000000000000000000000000000000 Outros casos: + infinito e - infinito (expoente 11111111, mantissa 0) NaN (not a number) S EXP MANTISSA (a) +1.101 x 25 0 10000100 1010000 00000000 00000000 (b) -1.01011 x 2-126 1 00000001 0101100 00000000 00000000 (c) +1.0 x 2127 0 11111110 0000000 00000000 00000000 (d) +0 0 00000000 0000000 00000000 00000000 (e) -0 1 00000000 0000000 00000000 00000000 (f) +infinito 0 11111111 0000000 00000000 00000000 (g) +2-128 0 00000000 0100000 00000000 00000000 (h) +NaN 0 11111111 0110111 00000000 00000000 Operações aritméticas: problemas de precisão e erro Suponhamos representar um número com 5 algarismos na mantissa. Somar (idealmente): 987654321 + 100432 aproximando: 0,98765 x 109 + 0,10043 x 106 para poder somar, tenho que renormalizar o de menor expoente 0,98765 x 109 + 0,00010 x 109 resposta: 0,98775 x 109 A precisão de PF é variável: menor número, maior precisão Nota: Existe um “menor número representável”