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 - IBM 850 BAUDOT ECMA LATIN 1 etc. - 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 10 25
Normalização 254 10 pode ser representado em ponto flutuante: 254 x 10 0 25,4 x 10 1 2,54 x 10 2 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 10 3 é a forma mais usada
Exemplo em ponto flutuante Representar o número 0,254 x 10 3 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 10 0 e assim você não precisará converter as decimais pelo método da multiplicação. Você achará o número 376 x 8 0
Solução do exercício (2) Normalize 376 8 x 8 0 = 0,376 x 8 3 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 some etc...
Exemplo 0 10000110 10100000000000000000 0 -> número é positivo 10000101-01111111 = 00000110 = 6 10 mantissa = 1,1010000... 1 + 1 x 1/2 + 0 x 1/4 + 1 x 1/8 = 1,625 10 resposta: 1,625 x 10 6 ou 0,1625 x 10 7
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 = 1101 2 0,5 = 0,1 2 logo: 1101,1 na base 2 normalizo: 1,1011 x 2 3 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 2 5 0 10000100 1010000 00000000 00000000 (b) -1.01011 x 2-126 1 00000001 0101100 00000000 00000000 (c) +1.0 x 2 127 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 10 9 + 0,10043 x 10 6 para poder somar, tenho que renormalizar o de menor expoente 0,98765 x 10 9 + 0,00010 x 10 9 resposta: 0,98775 x 10 9
A precisão de PF é variável: menor número, maior precisão Nota: Existe um menor número representável