Representação de Dados Representação de Dados
Representação de Dados Representação de Dados
Representação de Dados Representação de Dados
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<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