01.06.2013 Views

Representação de Dados Representação de Dados

Representação de Dados Representação de Dados

Representação de Dados Representação de Dados

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Representação</strong> <strong>de</strong> <strong>Dados</strong><br />

Proprieda<strong>de</strong>s<br />

Domínio - Valores que um tipo <strong>de</strong> dado po<strong>de</strong> assumir;<br />

Gama <strong>de</strong> variação - N.º <strong>de</strong> valores que um dado po<strong>de</strong> assumir;<br />

Precisão – Distância entre dois valores consecutivos<br />

Operações permitidas sobre dados;<br />

Classificação<br />

Tipo Escalar<br />

Discreto Não Discreto<br />

inteiro enumeração Virgula fixa Virgula flutuante<br />

<strong>Representação</strong> <strong>de</strong> <strong>Dados</strong><br />

Codificação<br />

<strong>Representação</strong> interna dos dados.<br />

MSB – Most Significant Bit – Bit mais significativo<br />

LSB – Lower Significant Bit – Bit menos significativo


Códigos Binários<br />

Inteiros não negativos<br />

A representação <strong>de</strong> números inteiros não negativos é feita pelo<br />

código binário natural.<br />

Proprieda<strong>de</strong>s do código binário natural<br />

N.º Bits<br />

N<br />

16<br />

Códigos Binários<br />

8<br />

Gama <strong>de</strong> variação<br />

0..2 N -1<br />

0..255<br />

0..65535<br />

<strong>Representação</strong> <strong>de</strong> números Inteiros negativos<br />

Tipos pré-<strong>de</strong>finidos em<br />

linguagem <strong>de</strong> alto nível<br />

(pascal)<br />

Byte<br />

word<br />

A codificação <strong>de</strong>ste tipo <strong>de</strong> dados é feita com recurso a códigos<br />

bipolares.<br />

Os códigos bipolares que iremos passar a estudar são os<br />

seguintes:<br />

• Sinal e valor absoluto<br />

• Complementos para 1<br />

• Complementos para 2


Códigos Binários<br />

Sinal e Valor Absoluto<br />

Bit <strong>de</strong> sinal + valor absoluto<br />

O bit <strong>de</strong> sinal tem 2 valores possíveis:<br />

0 quando o número é positivo<br />

1 quando o número é negativo<br />

O valor absoluto utiliza a representação do respectivo valor em<br />

código binário natural.<br />

Exemplo com N=8<br />

+19 0 + 0010011 (código. binário natural <strong>de</strong> 19) logo a representação <strong>de</strong> +19 em sinal<br />

e valor absoluto é 00010011.<br />

-19 1+0010011 (código. binário natural <strong>de</strong> 19) logo a representação <strong>de</strong> -19 em sinal e<br />

valor absoluto é 10010011.<br />

Códigos Binários<br />

Sinal e Valor Absoluto<br />

Este código apresenta uma gran<strong>de</strong> <strong>de</strong>svantagem a existência <strong>de</strong><br />

dois códigos binários para o valor zero.<br />

N.º Bits<br />

N<br />

8<br />

16<br />

0 0000000 (+0)<br />

ou<br />

1 0000000 (-0)<br />

Gama <strong>de</strong> variação<br />

-(2 N-1 -1)..+(2 N-1 -1)<br />

-127..+127<br />

-32767..+32767


Códigos Binários<br />

<strong>Representação</strong> <strong>de</strong> números positivos<br />

Complemento para 1<br />

Os números positivos são representados pelo código binário Natural. Como é<br />

facilmente perceptível esta representação é idêntica à usada em igual circunstância ao<br />

código do sinal e valor absoluto.<br />

Códigos Binários<br />

Número<br />

+19<br />

+10<br />

+65<br />

+133<br />

+255<br />

<strong>Representação</strong> <strong>de</strong> números negativos<br />

<strong>Representação</strong> em complemento para 1<br />

00010011<br />

00001010<br />

01000001<br />

10000101<br />

11111111<br />

Complemento para 1<br />

Os números negativos são obtidos através da complementação bit a bit, da<br />

representação em código binário natural do valor absoluto <strong>de</strong> um certo e <strong>de</strong>terminado<br />

número.<br />

Número a Representar<br />

-19<br />

-10<br />

-65<br />

-133<br />

-255<br />

Valor absoluto<br />

00010011<br />

00001010<br />

01000001<br />

10000101<br />

11111111<br />

Complemento para 1<br />

11101100<br />

11110101<br />

10111110<br />

Não Representável<br />

Não Representável


Códigos Binários<br />

Desvantagem<br />

Complemento para 1<br />

Tal como a representação em Sinal e Valor Absoluto o complemento para 1 tem dois<br />

códigos binários para o valor 0 (zero).<br />

São elas, 00000000 e 11111111.<br />

Códigos Binários<br />

Somas algébricas<br />

N.º Bits<br />

N<br />

8<br />

16<br />

Gama <strong>de</strong> variação<br />

-(2 N-1 -1)..+(2 N-1 -1)<br />

-127..+127<br />

-32767..+32767<br />

O total <strong>de</strong> valores distintos representáveis é <strong>de</strong> 2 N -1.<br />

Complemento para 1<br />

Vamos analisar alguns exemplos <strong>de</strong> como <strong>de</strong>vemos proce<strong>de</strong>r para efectuar-mos<br />

somas algébricas em complemento para 1.<br />

Exemplo 1: (+10) + (-2)=+8 (N=5)<br />

(+10)<br />

(-2)<br />

(+8)<br />

01010<br />

11101<br />

100111<br />

1<br />

01000<br />

00010 (+2)<br />

Soma binária<br />

Soma do ultimo transporte (se?0)


Códigos Binários<br />

Somas algébricas<br />

Exemplo 2: (-8) + (-5)=-13 (N=5)<br />

(-8)<br />

(-5)<br />

(-13)<br />

Códigos Binários<br />

Somas algébricas<br />

Complemento para 1<br />

10111<br />

11010<br />

110001<br />

1<br />

10010<br />

01000 (+8)<br />

00101 (+5)<br />

01101 (+13)<br />

Complemento para 1<br />

Soma binária<br />

Soma do ultimo transporte (se?0)<br />

Existem situações em que o resultado da soma algébrica não é representável com o<br />

mesmo número <strong>de</strong> bits utilizados para os operandos.<br />

Nesta situação dizemos que ocorreu um overflow<br />

Exemplo 3: (-10) + (-7)=-17 (N=5)<br />

(-10)<br />

(-7)<br />

(-17)<br />

10101<br />

11000<br />

101101<br />

1<br />

01110<br />

01010 (+10)<br />

00111 (+7)<br />

01110 (+14)<br />

Soma binária<br />

Soma do ultimo transporte (se?0)<br />

??????????????????????????<br />

Neste Exemplo houve OVERFLOW. Por norma isto acontece quando os dois últimos<br />

n−1<br />

transportes são diferentes. Excepto quando o resultado é igual a − ( 2 −1)


Códigos Binários<br />

Complemento para 2<br />

<strong>Representação</strong> <strong>de</strong> números positivos e nulos<br />

Os números positivos são representados pelo código binário Natural. Como é<br />

facilmente perceptível esta representação é idêntica à usada em igual circunstância ao<br />

código do sinal e valor absoluto e complemento para 1.<br />

Número<br />

0<br />

+19<br />

+65<br />

+133<br />

+255<br />

<strong>Representação</strong> em complemento para 2<br />

00000000<br />

00010011<br />

01000001<br />

10000101<br />

11111111<br />

Como se po<strong>de</strong> ver o valor 0 (zero) em complemento para 2 tem uma única<br />

representação.<br />

Códigos Binários<br />

<strong>Representação</strong> <strong>de</strong> números negativos<br />

Complemento para 2<br />

Os números negativos são obtidos através da passagem para complemento para 1, da<br />

representação em código binário natural do valor absoluto <strong>de</strong> um certo e <strong>de</strong>terminado<br />

número, seguido da adição <strong>de</strong> 1.<br />

N.º a<br />

Representar<br />

-19<br />

-10<br />

-65<br />

-133<br />

-255<br />

Valor<br />

absoluto<br />

00010011<br />

00001010<br />

01000001<br />

10000101<br />

11111111<br />

Complemento 1<br />

11101100<br />

11110101<br />

10111110<br />

Não Representável<br />

Não Representável<br />

Valor a<br />

somar<br />

+1<br />

+1<br />

+1<br />

+1<br />

+1<br />

Complemento 2<br />

11101101<br />

11110110<br />

10111111<br />

Não Representável<br />

Não Representável


Códigos Binários<br />

<strong>Representação</strong> <strong>de</strong> números negativos<br />

Complemento para 2<br />

Regra Prática:<br />

A partir do código binário natural do número em valor absoluto (positivo), copiam-se os<br />

bits, começando pelo menos significativo, até se encontrar o primeiro 1 que também<br />

se copia; a partir daí, substituem-se os 1 por 0 e vice versa.<br />

Exemplo 1 : Obtenção <strong>de</strong> -19 em C2<br />

+19 00010011<br />

-19 11101101<br />

copiar<br />

complementar<br />

Códigos Binários<br />

Exemplo 2: Obtenção <strong>de</strong> -24 em C2<br />

+24 00011000<br />

-24 11101000<br />

copiar<br />

complementar<br />

Complemento para 2<br />

Regra Prática:<br />

Em complemento para 2 po<strong>de</strong>mos aplicar a seguinte regra para <strong>de</strong>terminar o valor<br />

inteiro (positivo ou negativo) representado por uma <strong>de</strong>terminada codificação, bastando<br />

para isso, atribuir o peso que cada bit tem em código binário natural, sendo que o<br />

MSB tem um peso negativo, e efectuar a respectiva soma algébrica.<br />

Analisemos o seguinte exemplo consi<strong>de</strong>rando N=5<br />

Posição<br />

Pesos<br />

4<br />

1<br />

-16<br />

3<br />

0<br />

+8<br />

Efectuando a respectiva soma algébrica temos:<br />

-16+4+1= -11<br />

2<br />

1<br />

+4<br />

1<br />

0<br />

+2<br />

0<br />

1<br />

+1<br />

Como po<strong>de</strong>mos ver o bit <strong>de</strong><br />

sinal (MSB) é negativo.<br />

Esta regra aplica-se igualmente para<br />

números inteiros positivos.


Códigos Binários<br />

Vantagem<br />

Complemento para 2<br />

Ao contrário das representações em Sinal e Valor Absoluto e complemento para 1 o<br />

valor 0 (zero) tem uma representação única em complemento para 2, 00000000 (N=8).<br />

Códigos Binários<br />

Aumento da gama <strong>de</strong> variação<br />

N.º Bits<br />

N<br />

8<br />

16<br />

Gama <strong>de</strong> variação<br />

-(2 N-1 )..+(2 N-1 -1)<br />

-128..+127<br />

-32768..+32767<br />

O total <strong>de</strong> valores distintos representáveis é <strong>de</strong> 2 N .<br />

Complemento para 2<br />

O aumento da gama <strong>de</strong> variação po<strong>de</strong> ser feito através da propagação do bit <strong>de</strong> sinal<br />

para a esquerda. Se o número é negativo propaga-se para a esquerda o bit se sinal 1,<br />

se o número é positivo propaga-se 0.<br />

Exemplo: Aumento da gama <strong>de</strong> variação <strong>de</strong> N=4 para N=8<br />

-8<br />

+4<br />

-7<br />

1000<br />

0100<br />

1001<br />

11111000<br />

00000100<br />

11111001


Códigos Binários<br />

Somas algébricas<br />

Complemento para 2<br />

Em complemento para 2 as somas algébricas são efectuadas através <strong>de</strong> uma soma<br />

binária, <strong>de</strong>sprezando-se no final o último transporte.<br />

Sempre que o <strong>de</strong>sprezar do ultimo transporte leve a uma representação incorrecta<br />

do resultado da soma binária em causa, significa que ocorreu um overflow.<br />

(+8)<br />

(-3)<br />

Códigos Binários<br />

Somas algébricas<br />

Regra prática:<br />

Despreza-se<br />

01000<br />

11101<br />

100101<br />

(+5)<br />

00011 (+ 3)<br />

Complemento para 2<br />

Soma binária<br />

Por norma verifica-se a existência <strong>de</strong> um overflow em somas algébricas em C2<br />

quando os dois últimos transportes da soma binária são diferentes.<br />

(-10)<br />

(-6)<br />

(-12)<br />

(-14)<br />

Despreza-se<br />

Despreza-se<br />

10110<br />

11010<br />

110000<br />

01010 (+10)<br />

00110 (+ 6)<br />

(-16)<br />

10100<br />

10010<br />

100110<br />

01100 (+12)<br />

01110 (+14)<br />

(-26)<br />

2 últimos transportes iguais<br />

Não há overflow<br />

Soma binária<br />

Soma binária<br />

2 últimos transportes diferentes<br />

Há overflow<br />

20


Códigos Binários<br />

Resumo<br />

Complemento para 2<br />

O código <strong>de</strong> complemento para 2 é o código bipolar mais utilizado nos sistema<br />

computacionais por:<br />

• Utilizar um código único para o valor 0;<br />

• Utilizar a totalida<strong>de</strong> dos códigos binários na representação dos números (2 N ),<br />

visto que a sua gama <strong>de</strong> variação é -(2 N-1 ) ... +(2 N-1 -1);<br />

• Transformar as adições e subtracções em somas algébricas, utilizando apenas<br />

circuitos somadores binários;<br />

• Comparativamente ao código <strong>de</strong> complemento para 1, as somas algébricas são<br />

menos complexas, já que o último transporte é <strong>de</strong>sprezado;<br />

Códigos Binários<br />

Código BCD 8421 (Binary Co<strong>de</strong>d Decimal)<br />

Uma vez que a conversão <strong>de</strong> binário para <strong>de</strong>cimal é particularmente difícil (quando<br />

comparada com outras notações) e uma vez que existem muitos equipamentos<br />

digitais com saídas e/ou entradas <strong>de</strong>cimais (calculadoras, jogos....) <strong>de</strong>senvolveu-se<br />

um código binário especial para representação <strong>de</strong>sses números <strong>de</strong>cimais.<br />

Neste código a representação <strong>de</strong> cada dígito <strong>de</strong>cimal é feita por um conjunto <strong>de</strong> 4 bits.<br />

Por exemplo o número <strong>de</strong>cimal 458 tem como representação 0100 0101 1000 (12<br />

bits). A gran<strong>de</strong> vantagem é a conversão imediata <strong>de</strong> BCD para <strong>de</strong>cimal.<br />

Conversão <strong>de</strong> <strong>de</strong>cimal para BCD Conversão <strong>de</strong> BCD para <strong>de</strong>cimal<br />

21<br />

22


Códigos Binários<br />

Códigos Binários<br />

Valores Lógicos<br />

Código BCD 8421 (Binary Co<strong>de</strong>d Decimal)<br />

Estes valores são representados à custa <strong>de</strong> um byte.<br />

A representação dos valores lógicos True (verda<strong>de</strong>iro) e False (falso) é feita da<br />

seguinte forma:<br />

Operações lógicas elementares<br />

true – (-1) em C2 - 11111111<br />

false – 0 em C2 - 00000000<br />

NOT - Complementação;<br />

AND - Conjunção - Produto lógico;<br />

OR - Disjunção - Soma Lógica;<br />

XOR - Ou exclusivo;<br />

Como exemplo po<strong>de</strong>mos referir a <strong>de</strong>terminação <strong>de</strong> NOT(true) ⇔<br />

NOT(11111111)=00000000 (false). Na Prática efectuamos a complementação bit a bit.<br />

23<br />

24


Códigos Binários<br />

Caracteres<br />

A codificação <strong>de</strong> caracteres é feita através<br />

do conhecido código ASCII (American<br />

Standart Co<strong>de</strong> for Information<br />

Interchange).<br />

Cada símbolo (dígito, letra, sinal <strong>de</strong><br />

pontuação, etc.) é representado à custa<br />

<strong>de</strong> um byte (7 bits +1). Inicialmente o<br />

oitavo bit era utilizado como bit parida<strong>de</strong>,<br />

sendo, actualmente utilizado na obtenção<br />

<strong>de</strong> 128 códigos adicionais para<br />

codificação <strong>de</strong> caracteres acentuados e<br />

outros símbolos.<br />

25

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!