You are on page 1of 11

Atualizado em Prof. Rui Mano E-mail: rmano@tpd.puc-rio.

br

REPRESENTAO DE DADOS
ARITMTICA BINRIA E EM COMPLEMENTO Nesta seo, vamos rever os conceitos j apresentados sobre aritmtica binria e em complemento e resolver alguns exerccios para exemplo. Inicialmente, vamos considerar apenas nmeros positivos (o sinal no ser representado). Exemplo de Operaes de Adio
BASE 2 111 0111 + 0101 1100 BASE 8 11 0762 + 0365 1347 BASE 8 _11 7142 + 0576 7740 BASE 16 111 A679 + 49FB F074 BASE 16 111 6FACB + 4ED93 BE85E

Exemplo de Operaes de Subtrao


BASE 2 111 - 101 010 BASE 8 0762 - 0365 0375 BASE 8 7142 - 0576 6344 BASE 16 A679 - 49FB 5C7E BASE 16 6FACB - 4ED93 20D38

Exerccio: Suponha um sistema posicional de numerao na base 6. Determine os valores de R, S, T, V, X e Z.

RVTZR SRSVZ T FXVZS

Inicialmente, devemos considerar que cada uma das letras representa um algarismo, sem qualquer valor pr-determinado. a) T = 1, porque: T s pode ser 1; a soma de dois algarismos, em qualquer base b, ser no mximo igual a (2b) -1 e portanto o "vai-um" nunca ser "vai dois"!. b) V = 0, porque: como Z + V = Z, concluimos que V = 0 e a soma R + Z = S (no vai-um). c) S = 5, porque T + S = 0 o que significa que T + S = 6 (porque no pode ser 0, logo 0 + base = 6 e vai um para a prxima casa) e como T = 1, temos portanto S = 5. d) Assim, R + V = X, como V = 0 e veio 1 da casa anterior, temos que X = 1 + R Substituindo, temos que R + S = Z + 6 logo R-Z=1 R + Z= 5; somando as expresses, temos 2R = 6 ou R = 3 logo Z=2e X=4 ARITMTICA EM COMPLEMENTO - SOMA EM COMPLEMENTO A UM O algoritmo da soma em complemento a um : a) Somar os dois nmeros, bit a bit, inclusive o bit de sinal. b) Avaliao dos casos de "vai-um": b.1) Se no ocorreu vai-um para o bit de sinal nem para fora do nmero: --- este o resultado correto; b.2) Se ocorrer "vai-um" s para o bit de sinal (e no para fora do nmero): --- incorreto - ocorreu overflow ------- (isto significa que o resultado excede a faixa de representao para o nmero de bits adotado). b.3.1) Se ocorrer "vai-um" para fora do nmero: --- para obter o resultado final, soma-se o "vai-um" externo (para fora do nmero) ao resultado da soma; o bit para fora do nmero (que excede o nmero de bits adotado na representao) desprezado. b.3.2) Nesta soma final tambm pode ocorrer "vai-um" no ltimo bit; --- se o nmero de "vai-um" ocorridos (para o bit de sinal, para fora do nmero ou na soma final) for par (o que equivale a inverter duas vezes o sinal), ------ o resultado est correto;

--- se o nmero for mpar (1 ou 3 "vai-um"): ------ o resultado est incorreto - ocorreu overflow. Exemplos (referidos aos casos acima), considerando representao com 6 bits:
caso b.1: 15 +10 = 2510 _111 001111 (+) + 001010 (+) 011001 (+) caso b.2: 15 + 22 = 3710 1111 001111 (+) + 010110 (+) 100101 (-) caso b.3: -15 -10 = -2510 11 110000 (-) + 110101 (-) 100101 + ______1 100110 (-) CORRETO (ocorreu "vai-um" p/ bit de sinal e p/ fora do n mas no na soma final - n de "vaium" par) caso b.3: -15 -22 = -3710 1 110000 (-) + 101001 (-) 011001 + ______1 011010 (+) OVERFLOW (ocorreu "vai-um" s p/ fora do n mas no na soma final - n de "vai-um" mpar) obs.: soma de dois n negativos no poderia dar positivo

CORRETO (no ocorreu "vai-um")

OVERFLOW (s ocorreu "vai-um" para o bit de sinal) obs.: soma de dois n positivos no poderia dar negativo

A faixa de repreentao com 6 bits em C1 vai de -31 a +31. Conferindo as contas pela representao decimal, vemos que os resultados fora desta faixa excedem a faixa da representao e no podem ser representados com 6 bits (portanto, com este nmero de bits, ocorre overflow). Existe um teste prtico que, quando ambos os nmeros tem o mesmo sinal, pode mostrar se ocorreu overflow e o resultado obtido est incorreto: basta ver que na soma de dois nmeros negativos, o resultado s pode ser negativo, e a soma de dois nmeros positivos s poderia dar resultado positivo! ARITMTICA EM COMPLEMENTO - SOMA EM COMPLEMENTO A DOIS O algoritmo da soma (ou subtrao) em complemento a dois : a) Somar os dois nmeros, bit a bit, inclusive o bit de sinal. b) Despreza-se o bit para fora do nmero, se houver. c.1) Se no ocorreu vai-um para o bit de sinal nem para fora do nmero ou

c.2) Se ocorrer "vai-um" tanto para o bit de sinal quanto para fora do nmero (equivale a inverter duas vezes o sinal): --- o resultado est correto; d.1) Se ocorrer "vai-um" s para o bit de sinal (e no para fora do nmero): d.2) Se no ocorrer "vai-um" para o bit de sinal e somente ocorrer para fora do nmero: --- o resultado incorreto - ocorreu overflow ------- (isto significa que o resultado excede a faixa de representao para o nmero de bits adotado). Nota: Podemos constatar que o algoritmo de soma em C2 bem mais simples que o de soma em C1. Exemplos (referidos aos casos acima), considerando representao com 6 bits:
caso c.1: 15+10 = 2510 _111 001111 (+) + 001010 (+) 011001 (+) CORRETO (no ocorreu "vaium") caso d.1: 15 + 17 = 3210 11111 001111 (+) + 010001 (+) 100000 (-) OVERFLOW (s ocorreu "vaium" para o bit de sinal) obs.: soma de n positivos no poderia dar negativo caso c.2: -15 -10 = -2510 1 110001 (-) + 110110 (-) 100111 (-) CORRETO (ocorreu "vai-um" p/ bit de sinal e p/ fora do n - o n de "vaium" par) (despreza-se o "vaium" para fora do nmero) caso c.2: -15 -17 = -3210 1 11111 110001 (-) + 101111 (-) 100000 (-) CORRETO (ocorreu "vai-um" p/ bit de sinal e p/ fora do n - o n de "vaium" par) (despreza-se o "vaium" para fora do nmero) caso d.2: -15 -27 = -4210 1 ____1 110001 (-) + 100101 (-) 010110 (+) OVERFLOW (s ocorreu "vai-um" p/ fora do n - o n de "vaium" mpar) obs.: soma de n negativos no poderia dar positivo (despreza "vai-um" p/ fora do n)

A faixa de repreentao com 6 bits em C2 vai de -32 a +31. Conferindo as contas pela representao decimal, vemos que os resultados fora desta faixa esto necessariamente incorretos (ocorreu overflow) Pode-se aplicar o mesmo teste prtico que, quando ambos os nmeros tem o mesmo sinal, pode mostrar se ocorreu overflow e o resultado obtido est incorreto: basta ver que na soma de dois nmeros negativos, o resultado s pode ser negativo, e a soma de dois nmeros positivos s poderia dar resultado positivo!

ARITMTICA EM SINAL E MAGNITUDE Em sinal e magnitude, o algoritmo da soma : a) Se os nmeros forem de mesmo sinal, basta somar os dois nmeros e manter o sinal; b) Se os nmeros forem de sinais diferentes, subtrai-se o menor nmero do maior; o sinal ser o do maior nmero. c) Tem-se overflow sempre que ocorrer "vai-um" da magnitude para o bit de sinal (o nmero de bits da magnitude foi excedido).
__1 0010 (positivo) + 0101 (positivo) 0111 CORRETO ambos positivos -> soma e mantm o sinal positivo 1001 (negativo) + 1101 (negativo) 1110 CORRETO ambos negativos -> soma e mantm o sinal negativo 0110 (positivo e maior) + 1010 (negativo e menor) 0100 CORRETO sinais contrrios -> subtrai maior magnitude positivo -> resultado positivo 1110 (negativo e maior) + 0100 (positivo e menor) 1010 CORRETO sinais contrrios -> subtrai maior magnitude negativo -> resultado negativo 11 1110 (negativo) + 1101(negativo) 1011 OVERFLOW ambos negativos -> soma "vai-um" para bit de sinal -> overflow

Mtodo sinal-e-magnitude
Sinal-e-magnitude de 8 bits

Binrio

com Sinal

sem Sinal

00000000

+0

00000001

...

...

...

01111111

127

127

10000000

128

10000001

129

...

...

...

11111111

127

255

A representao de sinal-e-magnitude ou sinal-magnitude a mais familiar a ns que utilizamos o sistema numrico de base 10, usando um sinal positivo ou negativo esquerda do nmero para indicar se este positivo ou negativo. [1] Pode-se primeiramente abordar o problema de representar um sinal de nmero atravs da atribuio de um bit de sinal para representar o sinal: define-se esse bit(frequntemente o bit mais significativo) para 0 para representar um nmero positivo, e define-se como um para representar um nmero negativo. Os bits restantes do nmero representam a magnitude (ou o valor absoluto). Assim, em um byte com 8 bits, so utilizados 7 bits para representar o valor e um bit para representar o sinal. Neste caso, o valor pode variar de 0000000 (0) a 1111111 (127). Assim, pode-se representar nmeros de 12710 a +12710, uma vez que voc adicione o bit de sinal (o oitavo bit). Uma conseqncia desta representao que existem duas maneiras de representar o zero, 00000000 (0) e 10000000 (-0).[2] Esta abordagem directamente comparvel com a maneira comum de se mostrar um sinal (colocando um "+" ou "-" junto magnitude do nmero). Alguns dos primeiros computadores binrios (por exemplo, o IBM 7090) usaram esta representao, talvez por causa de sua relao natural com o uso comum.[carece de fontes] Sinal de magnitude a forma mais comum de representar os significandos em valores de ponto flutuante.

Complemento para um

Complemento para um com 8 bits

Binrio

Interpretao de complemento para um

Interpretao sem sinal

00000000

+0

00000001

...

...

...

01111101

125

125

01111110

126

126

01111111

127

127

10000000

127

128

10000001

126

129

10000010

125

130

...

...

...

11111110

254

11111111

255

Como alternativa, um sistema conhecido como complemento para um oucomplemento de um pode ser usado para representar nmeros negativos. A forma de representar nmeros negativos em "complemento para um" aplicar a operao bitwise NOT para os nmeros negativos (com -), o seja, o complemento da sua contraparte positiva. Como na representao sinal de magnitude, o "complemento para um" tem duas representaes para o 0: 00000000 (+0) e 11111111 (-0). Na prtica, este zero negativo, quando detectado transformado em zero normal. [3]:p.17,18 Como exemplo, a forma em complemento para um de 00101011 (43) torna-se 11010100 (-43). O intervalo de nmeros com sinal usando complemento para um representado por: (2N11) para (2N11) e +/-0. Um byte de oito bits convencional 12710 para +12710 com zero sendo ou 00000000 (+0) ou 11111111 (-0). Para adicionar dois nmeros representados neste sistema, se faz uma adio binria convencional, mas ento necessrio adicionar qualquer "vai-um" resultante de volta para a soma resultante. Para ver por que isso necessrio, considere o seguinte exemplo que mostra o caso da adio de 1 (11111110) a +2 (00000010).[2]:p.19 binrio 11111110 + 00000010 ............ 1 00000000 1 ............ decimal -1 +2 ... 0 <-- no a resposta correta +1 <-- adiciono "vai-um" ...

00000001

<-- resposta correta

No exemplo anterior, a adio binria somente d 00000000, o que um resultado incorreto. Somente quando o "vai-um" adicionado de volta o resultado correto (00000001) aparece. Este sistema de representao numrica era comum em computadores mais antigos; o PDP-1, CDC 160A e a srie UNIVAC 1100/2200, entre muitos outros, utilizavam aritimtica de "complemento para um".[carece de fontes] Uma observao sobre ortografia: O sistema conhecido como "complemento para um", porque a negao de um valor positivox(representado como a operao bitwise NOT de x) pode tambm ser formado pela subtrao de x da representao em "complemento para um" do nmero zero que uma longa seqncia de uns (-0). A aritmtica de "Complemento de dois", por outro lado, constitui a negao de x subtraindo x a partir de uma nica grande potncia de dois que congruente a 0. [4] Por isso, a representao de "complemento para um" e a representao de "complemento para dois" iro diferir de um. Os protocolos Internet IPv4, ICMP, UDP e TCP usam todos o mesmo algoritmo checksum de 16 bits de complemento para um. Embora a maioria dos computadores carea de um hardware para mtodo de complementos, a complexidade extra aceita porque " igualmente sensvel a erros em todas as posies dos bits".[5] No UDP, a representao de zero com todos os bits setados para 0s indica que o recurso de verificao opcional foi omitido. A outra representao, FFFF, indica um valor de checksum 0. [6] (Checksums so obrigatrios em IPv4, ICMP e TCP; eles foram omitidos do IPv6). Note que a representao de complemento para um de um nmero negativo pode ser obtida de uma representao sinal-e-magnitude simplesmente fazendo-se uma operao de complemento bitwise da magnitude.[necessrio esclarecer] [editar]Complemento

para dois

Complemento para dois de 8 bits

Binrio

Interpretao de complemento

Interpretao sem sinal

para dois

00000000

00000001

...

...

...

01111110

126

126

01111111

127

127

10000000

128

128

10000001

127

129

10000010

126

130

...

...

...

11111110

254

11111111

255

Ver artigo principal: Complemento para dois Os problemas de mltiplas representaes de 0 e a necessidade de tratamento com "vai-um" so contornadas por um sistema chamado complemento para dois.[2]:p.21Neste modelo, os nmeros negativos so representados pelo padro de bits que maior em uma unidade (no sentido sem-sinal) que o "complemento para um" do valor positivo. Em complemento para dois, h apenas um zero (00000000). Se nega um nmero (negativo ou positivo) invertendo-se todos os bits e, em seguida, adicionando 1 ao resultado. A adio de um par nmeros em complemento para dois o mesmo a adio de um par de nmeros semsinal . Por exemplo, um complemento para dois da adio de 127 e -128 d o mesmo padro de bits binrio de uma adio sem sinal de 127 com 128, como pode ser visto na tabela acima.[2]:p.21 Um mtodo mais fcil de obter a negao de um nmero em complemento de dois o que se segue: Exemplo 1 Exemplo 2

1. A partir da direita, encontre o primeiro '1'

0101001

0101100

2. Inverte todos os bits esquerda deste um 1010111

1010100

You might also like