You are on page 1of 23

Os Sistemas de Numeração................................................................................................................

2
Tipos de sistemas de numeração ..................................................................................................2
Base de um Sistema de Numeração .............................................................................................3
Como Ler os Números Corretamente...........................................................................................3
Como Efetuar a Conversão entre Bases Diferentes ...............................................3
Conversão de Números Inteiros de Qualquer Base para a Decimal ............................................4
Conversão de Números Decimais Inteiros para as Demais Bases ...............................................4
Conversão binário-octal-binário ...................................................................................................5
Conversão binário-hexadecimal-binário ......................................................................................6
Conversão octal-hexadecimal-octal .............................................................................................6
Conversão de Números Binários Fracionários .............................................................................6
Conversão de números Decimais Fracionários para Binário .......................................................7
Aritmética de Números Binários ....................................................................................8
Adição Binária..............................................................................................................................8
Subtração Binária .........................................................................................................................8
Adição e Subtração Octal e Hexadecimal ....................................................................................9
Adição Octal .............................................................................................................................9
Adição em Hexadecimal ........................................................................................................10
Subtração Octal ......................................................................................................................10
Subtração Hexadecimal ..........................................................................................................10
Representação de Números negativos ........................................................................11
Sinal Magnitude ou Sinal e Magnitude ......................................................................................11
Complemento de Um .................................................................................................................11
Complemento de Dois ................................................................................................................12
Adição e Subtração em Ponto Fixo e em Complemento de Um e de Dois
........................................................................................................................................................12
Adição e Subtração em Complemento de Um ...........................................................................12
Adição Usando Complemento de Dois ......................................................................................13
Subtração usando Complemento de 2 ........................................................................................14
Exercícios .............................................................................................................................15
Códigos Binários ............................................................................................................................17
Códigos Binários Ponderados ....................................................................................................18
Verificador e Gerador de Paridade .................................................................................................18
Código de Hamming ......................................................................................................................20
Detectando e Corrigindo Erros ...................................................................................................22
Capítulo 2

Os Sistemas de Numeração

"Os ignorantes, que acham que


sabem tudo, privam-se de um dos maiores
prazeres da vida: APRENDER".
(Gustavo de Assis).

O homem, ao longo dos tempos, sentiu a necessidade de criar um sistema para controlar
as quantidades dos seus diversos objetos. Assim, foi criado o sistema de numeração que é o
conjunto de símbolos, palavras e regras que nos permite escrever e dar nomes a todos os
números.

Tipos de sistemas de numeração

Os sistemas de numeração podem ser de dois tipos: não posicionais e posicionais.

Sistemas não posicionais – são aqueles em que os símbolos possuem um valor


associado, independentemente da sua posição dentro do número.
Exemplo: o sistema de numeração romano.

Sistemas posicionais – são aqueles que possuem dois valores associados ao


símbolo: um valor intrínseco e um valor de posição. O valor intrínseco corresponde
ao valor associado ao símbolo independentemente da sua posição no número, e o
valor de posição correspondente ao valor associado ao símbolo, que varia de
acordo com a sua posição no número.
Exemplo: o sistema arábico.
Base de um Sistema de Numeração

A base de um sistema de numeração é definida pela quantidade de símbolos utilizados para


representar as quantidades desse sistema. Existe uma infinidade de sistemas de numeração, mas
os mais conhecidos e utilizados em computador são:

Sistema Binário – é o sistema utilizado pelos sistemas de processamento eletrônico


de dados. Os símbolos que constituem a base deste sistema são o 0 e o 1.

Sistema Octal – é também um sistema utilizado em computador que visa facilitar o


manuseio dos dados por ser de mais fácil leitura para o homem que o sistema binário.
Sua base é constituída por oito símbolos: 0, 1, 2, 3, 4, 5, 6 e 7.

Sistema Decimal – é o sistema mais difundido, por ser ensinado desde a escola
primária. Sua base é constituída por dez símbolos: 0, 1, 2, 3, 4, 5, 6, 7, 8 e 9.

Sistema Hexadecimal – Possui função semelhante à do sistema octal, porém é muito


mais utilizado hoje em dia, graças a possibilidade de a representação ser mais extensa
que a do octal. Sua base é composta por dezesseis símbolos: 0, 1, 2, 3, 4, 5, 6, 7, 8,
9, A, B, C, D, E e F.

Como Ler os Números Corretamente

Para que se possa interpretar um número de forma correta, faz-se necessário o seu
reconhecimento. Um sistema de numeração é formalmente descrito da seguinte forma:

(números)base

Isto significa dizer que o número (10101010)2 é um número na base 2, ou seja, é um


número binário. Já o número (252)8 é um número na base 8, ou seja, é um número octal. O
número (190)10 é um número na base 10, ou seja, é um número decimal (este é o nosso sistema
comum de numeração). O numero (F3D99)16 é um número de base 16, ou seja, é um número
hexadecimal (normalmente é o mais utilizado em informática para representar endereços).

Como Efetuar a Conversão entre Bases Diferentes

Para que sejam efetuados cálculos numéricos, torna-se necessário que todos os números
envolvidos no cálculo se encontrem em uma mesma base de numeração, ou seja, só podemos
efetuar cálculos de números hexadecimais com hexadecimais, decimais com decimais, e assim por
diante. Para isso, torna-se necessário que se tenha o conhecimento de como passar um número
de uma base numérica para outra.
Conversão de Números Inteiros de Qualquer Base para a Decimal

Para que um número, em qualquer base seja convertido para a base decimal, utiliza-se a
seguinte regra genérica:

__ …__ __ __ __ __
X X X X X X = nº em decimal
n 4 3 2 1 0
B ...+B +B +B +B +B

Em que B é à base do número e n a posição do dígito mais à esquerda do número (a


contagem inicia-se sempre por zero).

Exemplos:
Aplicando a fórmula para um número binário (10101010)2, temos:

(1x27) +(0x26) +(1x25) +(0x24) +(1x23) +(0x22) +(1x21) +(0x20) = (170)10

Aplicando a fórmula para um número octal (176)8, temos:

(1x82) +(7x81) +(6x80) = (126)10

Aplicando a fórmula para um número decimal (176)10, temos:

(1x102) +(7x101) +(6x100) = (176)10

Aplicando a fórmula para um número hexadecimal (1ABC)16, temos:

(1x163) + (10x162) + (11x161) +(12x160) = (6844)10

É interessante notar, no caso dos números hexadecimais, que as letras A, B, C, D, E e F


correspondem respectivamente aos números 10, 11, 12, 13, 14 e 15, devendo sempre ser
substituídos por estes na aplicação da fórmula genérica.

Conversão de Números Decimais Inteiros para as Demais Bases

Para que um número decimal seja convertido para a base binária, octal ou hexadecimal,
utiliza-se a seguinte regra genérica:

(Número)10 B
(r0) Q0 B
(r1) Q1 B
(r2) Q2
.
.
.
Qm-1 B
(rn) (Qm)

em que B é a base para a qual se deseja converter o número decimal, ri (i = 0,1,2,...n) é o resto
da divisão e Qj (j = 0, 1, 2,...m) é o quociente da divisão. A divisão se processa até que Qm seja
menor que a base B. O número na nova base B é formado da seguinte forma:
(Número)10 = (Qm rn rn-1 … r2 r1 r0)B

Exemplos:
Vamos converter o número (59)10 para o seu equivalente binário. Aplicando o
processo descrito acima, temos:

59 2
(1) 29 2
(1) 14 2
(0) 7 2
(1) 3 2
(1) (1)
logo, (59)10 = (111011)2

Vamos converter o número (1025)10 para o seu equivalente octal. Aplicando o


processo descrito acima, temos:

1025 8
(1) 128 8
(0) 16 8
(0) (2)
logo, (1025)10 = (2001)8

Vamos converter o número (6844)10 para o seu equivalente hexadecimal.


Aplicando o processo descrito acima, temos:

6844 16
(12) 427 16
(11) 26 16
(10) (1)
logo, (6844)10 = (1ABC)16

note que os valores 10, 11 e 12 foram trocados por seus respectivos valores da base hexadecimal
A, B e C.

Conversão binário-octal-binário

Tomando-se como exemplo o número (725)8, para efetuar uma conversão octal-binário,
faz-se o seguinte: decompõe-se, dígito a dígito, o número para binário, em grupos de três. Assim
temos:

Número octal 7 2 5
Número binário 111 010 101

Assim, agrupam-se os números obtidos e obtém-se o resultado da conversão: (725)8 =


(111010101)2

Para a conversão inversa, agrupam-se os dígitos binários em grupos de três, da direita


para a esquerda (completando-se com zero a esquerda quando necessário), e depois se faz à
conversão para octal. Para a conversão do número (1111010101)2 para octal, tem-se:
Número binário 001 111 010 101
Número octal 1 7 2 5

Assim, agrupam-se os números obtidos e obtém-se o resultado da conversão: (1111010101)2 =


(1725)8

Conversão binário-hexadecimal-binário

Funciona de forma idêntica ao da conversão binário-octal-binário, com a diferença de que


os agrupamentos não são mais feitos de três em três dígitos, e sim de quatro em quatro dígitos.
Assim, para o número (4EF)16, tem-se:

Número hexadecimal 4 E F
Número binário 0100 1110 1111
Assim, agrupam-se os números obtidos e obtém-se o resultado da conversão:

(4EF)16 = (10011101111)2

Conversão octal-hexadecimal-octal

Um método simples para esse tipo de conversão é converter de octal para hexadecimal,
decompõe-se o número octal, digito a digito, em binário (grupo de três); depois, agrupa-se da
direita para a esquerda, em grupos de quatro, para depois transformar esses grupos no seu
respectivo valor hexadecimal. Assim, para o número (537)8, tem-se:

Número octal 5 3 7
Número binário 101 011 111

Número binário 0001 0101 1111


Número hexadecimal 1 5 F

Assim, (537)8 = (15F)16. Note que foram introduzidos três zeros a esquerda do número
binário, para completar o conjunto de quatro. Isto não altera o valor original do número.

Para converter de hexadecimal para octal, trabalha-se da mesma maneira, mas em


vez de decompor o número binário e agrupar de quatro em quatro dígitos, agrupa-se de três em
três os dígitos binários.

Conversão de Números Binários Fracionários

De forma similar ao método utilizado para converter números binários inteiros para
decimal, utiliza-se a seguinte regra genérica:

bn … b1 b0 , b-1 b-2 … bm = nº em decimal


X X X X X X
2n 21 20 2-1 2-2 2m

em que b(n/m) é o bit da palavra binária, n+1 é a quantidade de bits que representa a parte inteira
e m a quantidade de bits da parte fracionária.
Exemplos:
Aplicando a fórmula para um número binário (1010,1010)2, temos:

1x23+0x22+1x21+0x20+1x2-1+0x2-2+1x2-3+0x2-4 = 10,62510

Aplicando a fórmula para um número binário (1001,1010)2, temos:

1x23+0x22+0x21+1x20+0x2-1+1x2-2+1x2-3+1x2-4 = 9,437510

Conversão de números Decimais Fracionários para Binário

A conversão de números decimais fracionários para binário é feita em duas etapas


distintas. A primeira consiste em converter a parte inteira do número usando o método descrito
anteriormente (vide seção 2.4). A segunda é transformar a parte fracionária utilizando a regra que
consiste da multiplicação sucessiva das partes fracionárias resultantes pela base (binária), até
atingir zero. O número fracionário convertido será composto pelos algarismos inteiros resultantes
tomando na ordem das multiplicações.

Exemplo 1: Converter o número decimal 8,37510 para a seu equivalente na base binária.

Primeira parte – parte inteira

8 2 810 = 10002
(0) 4 2
(0) 2 2
(0) (1)

Segunda parte – parte fracionária

0 , 3 7 5
X 2
0 , 7 5 0
X 2
- Quando atingirmos o número 1, e a parte do número após a
1 , 5 0 0 vírgula for nula, separamos esta última e reiniciamos o processo.
0 , 5 0 0 - Este zero não conta, pois o 1 anterior já foi computado
X 2
1 , 0 0 0

Assim, 0,37510 = 0,0112 8,37510 =1 000,0112.

Exemplo 2: Converter o número decimal 4,810 para a seu equivalente na base binária.

Primeira parte – parte inteira → 410 = 1002

Segunda parte – parte fracionária


0 , 8
x 2
1 , 6
0 , 6
x 2
1 , 2
0 , 2
x 2
0 , 4
x 2
0 , 8

Podemos notar que o número 0,8 volta a aparecer logo, ao continuarmos o processo teremos a
mesma seqüência já vista até aqui. Este é o caso equivalente a uma dízima.
Temos então:
0,810 = ( 0,1100 1100 1100 ... )2
Seqüência Repetições
calculada
Assim, 4,810 = 100,1100 1100 1100 ...2.

Aritmética de Números Binários

Os circuitos do computador só processam números binários. No entanto, as operações


aritméticas, para a base em questão, seguem os mesmos procedimentos conhecidos da base
decimal. Analisaremos os procedimentos aplicados nas operações:

- Adição
- Subtração
- Multiplicação e Divisão

Adição Binária

De forma similar ao que ocorre na soma decimal, quando o resultado da soma excede o
valor do símbolo de maior valor da base, há o transporte do excedente para a próxima soma. Ou
seja, utiliza-se o “vai um” para a coluna seguinte. No caso da adição binária a tabuada a ser
seguida tem apenas quatro casos:
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 0 e vai 1 (chamado de carry) para a próxima operação

Ex.1: Somar os números binários (1011 + 0011)2

1 1
1 0 1 1 = 11
+ 0 0 1 1 = 3
1 1 1 02 = 1410

Ex.2: Somar os números binários (110 + 111)2:

1 1
1 1 0 = 6
+ 1 1 1 = 7
1 1 0 12 = 1310

Subtração Binária

A tabuada para este caso é:


0 - 0 = 0
0 - 1 = 1 e subtrai um do seguinte
1 - 0 = 1
1 - 1 = 0

Ex.3: Subtrair 11102 de 100012


1 0 0 0 1
1 1 1
- 1 1 1 0
0 0 0 1 1

Ex.4: Subtrair 1012 de 10102


1 0 1 0
1 1
- 1 0 1
0 1 0 1

Adição e Subtração Octal e Hexadecimal

Pessoas que trabalham com computadores ou microprocessadores freqüentemente usam


octal ou hexadecimal como uma maneira curta de representar números binários longos tais como
endereço de memória. É muito interessante sabermos como adicionar e subtrair números octais e
hexadecimais.

Adição Octal

A figura a seguir mostra duas maneiras de somarmos os números octais 47 e 36. A


primeira é converter ambos os números para os seus equivalentes binários. Relembrando, cada
dígito octal representa três dígitos binários. Esses números binários são então somados usando as
regras para adição descrita anteriormente. O binário resultante é então convertido de volta para
octal.
O segundo método trabalha diretamente com a forma octal: 7 adicionado a 6 dá 13, que
gera um carry para a próxima soma e um resto de 5. O 5 é o quanto o valor 13 excedeu a base
octal (13-8). Então 4 mais 3 mais o carry dá 8, que gera um carry com nenhum resto. O 0 é
escrito abaixo e o carry é adicionado ao digito da próxima coluna. Este é o mesmo processo que
você usa para adição decimal, mas aqui um carry é produzido toda vez que a soma for igual ou
superior a 8.
1
478 1 0 0 1 1 1 4 78
+ 368 + 0 1 1 1 1 0 + 3 68
1058 1 0 0 0 1 0 1 810 1310
1 0 58 1 0 58
(a) (b)
Figura – Adição Octal (a) soma binária equivalente (b) Adição octal direta
Adição em Hexadecimal

Podemos usar as mesmas abordagens utilizadas para somar números octais para
somarmos números hexadecimais. Devemos lembrar, no entanto, que cada digito hexadecimal
representa quatro dígitos binários. Os números binários são somados e o resultado é convertido
de volta para hexadecimal.
No método que trabalha diretamente com os números hexadecimais, um carry é gerado se
a soma é maior que a base 16. Um A em hex é um 10 em decimal e um F é 15 em decimal.
Somando os dois temos 25, que gera um carry e um resto de 9. O 9 é o que excedeu a base
hexadecimal (25-16). Então o 7 é somado a 3 e ao carry resultando no decimal 11, ou B em hex.
Você pode usar o método que lhe parecer mais fácil e lhe der mais consistência
1
7A 0 1 1 1 1 0 1 0 7 A16
+ 3F + 0 0 1 1 1 1 1 1 + 3 F16
B9 1 0 1 1 1 0 0 1 1110 2510
B16 916
(a) (b)
Figura 2 – adição hexadecimal

Subtração Octal

A subtração octal é mostrada na próxima figura. Devido ao digito menos significativo do


minuendo ser menor que o LSB do subtraendo, um borrow (empréstimo) precisa ser feito. Em
subtrações octais, 8 é emprestado do próximo digito e adicionado ao número do minuendo. O
subtraendo é subtraído e o resto escrito em baixo. O processo é continuado até todos os dígitos
serem subtraídos. Se você esta desconfortável em emprestar 8, você pode simplesmente
converter o número para decimal, subtrair e converter o resultado de volta para octal.

Subtração Hexadecimal

Subtração hexadecimal é similar a subtração octal exceto que, quando um empréstimo é


necessário, empresta-se 16 do próximo digito mais significativo. A figura a seguir mostra isto. Ela
pode ajuda-lo a seguir o exemplo se você fizer conversões parciais para decimal em sua cabeça.
Pro exemplo, 7 somado a um borrow 16 é 23. Subtraindo B ou 11 sobra 12 ou C em hex. Então 3
de 6 deixado depois do empréstimo sobre 3, então o resultado é 3C16

7 716 11910
- 3 B16 = - 5910
3 C16 6010
Figura 4 – Subtração hexadecimal
Representação de Números negativos

A representação de números negativos coloca problemas em sistemas informáticos, pois os


valores possíveis de representar são binários, o que implica que o sinal "-" não esteja incluído. Daí
ser necessário definir regras de representação.

Sinal Magnitude ou Sinal e Magnitude

Representação na qual o bit mais significativo (MSB) do número é utilizado para indicar o
sinal: 0 para números positivos e 1 para negativos.

Exemplos:

Número positivo: 001100


Número negativo: 1001100

No entanto isto levanta uma questão interessante: e o zero, também pode ser negativo? Se
considerarmos que o número é representado pelo computador usando 4 bits, teríamos:

7 0111
6 0110
5 0101
4 0100
3 0011
2 0010
1 0001
0 0000
-0 1000
-1 1001
-2 1010
-3 1011
-4 1100
-5 1101
-6 1110
-7 1111

Portanto, para além de ser incorreto representar-se o valor -0, existe uma combinação de
dígitos que poderia ser usada para um outro valor válido.

Complemento de Um

Representação na qual o número negativo é obtido, a partir de um número positivo, pela


complementação de todos os bits, isto é, pela troca de todos os uns do número por zeros e de
todos os zeros por uns.

Ex.: A= 1 1 0 1 02 A = 0 0 1 0 12
Mais uma vez há representações para +0 e –0, que são 0000 e 1111 (em quatro bits),
respectivamente.

A solução está em usar a representação em complemento para 2.


Complemento de Dois

Representação na qual o número negativo é obtido pela adição de um ao complemento de


um do número.

Ex. Obter o complemento de 2 de 110102

Complemento de 1 001012
Adiciona 1 +12
Complemento de 2 001102

Assim, a representação em complemento de 2, e que é a representação corrente em


informática, será (em quatro bits):

7 0111
6 0110
5 0101
4 0100
3 0011
2 0010
1 0001
0 0000
-1 1111
-2 1110
-3 1101
-4 1100
-5 1011
-6 1010
-7 1001
-8 1000

Ou seja, existe mais um valor negativo que anteriormente, e que substitui o -0. Aplica-se
o mesmo procedimento quer se trate de 4, 8, 16, 32 ou outro qualquer número de bits.

Adição e Subtração em Ponto Fixo e em Complemento de Um e de


Dois

Somar é o mínimo que se poderia esperar dos computadores. Os bits são somados uma a
um da direita para esquerda, com os carries (vai um) sendo passados para o próximo bit à
esquerda, utilizando a mesma metodologia que usamos quando somamos a mão. A subtração usa
a adição: o subtraendo é simplesmente complementado de um ou de dois, antes de ser somado ao
minuendo.

Adição e Subtração em Complemento de Um

Para subtrair usando o método de complemento de um, o complemento de um do


subtraendo é somado ao minuendo. O carry out do bit mais significativo é então adicionado ao
LSB da soma. Isto é chamado end-around carry.

Ex.: Encontre a diferença entre 1 0 1 1 0 0 1 12 e 0 1 1 0 1 1 0 12.


Solução:

(Minuendo) 1 0 1 1 0 0 1 1 1 0 1 1 0 0 1 1

(Subtraendo) 0 1 1 0 1 1 0 1 + 1 0 0 1 0 0 1 0 (Complemento de um)

1 0 1 0 0 0 1 0 1

+ 1 (End-around carry)

0 1 0 0 0 1 1 0 (Diferença)

Ex.: Encontre a diferença entre 1 1 0 1 1 0 0 0 2 e 1 0 1 1 0 0 1 12 usando o método de


complemento de um.

Solução:

(Minuendo) 1 1 0 1 1 0 0 0 1 1 0 1 1 0 0 0

(Subtraendo) 1 0 1 1 0 0 1 1 + 0 1 0 0 1 1 0 0 (Complemento de um)

1 0 0 1 0 0 1 0 0

+ 1 (End-around carry)

0 0 1 0 0 1 0 1 (Diferença)

Adição Usando Complemento de Dois

Vejamos os seguintes exemplos de adição de números de oito bits (um byte) em


complemento de dois:

a. O primeiro com números positivos

0 0 0 0 1 0 1 0 (+10)10
+ 0 0 0 1 0 1 1 1 (+23)10
0 0 1 0 0 0 0 1 (+33)10

b. Um número positivo e outro negativo


0 0 0 0 0 1 0 1 (+5)10
+ 1 1 1 1 1 1 1 0 (-2)10
Eliminar excedente (1) 0 0 0 0 0 0 1 1 (+3)10
O excedente gerado pela adição do bit mais significativo (à esquerda) é eliminado na
adição em complemento de dois. Uma situação similar ocorre com um excedente do bit mais
significativo quando se somando dois números negativos. Veja o próximo caso.

c. Dois números negativos

1 1 1 1 1 1 1 1 (-1)10
+ 1 1 1 1 1 1 0 0 (-4)10
Eliminar excedente (1) 1 1 1 1 1 0 1 1 (-5)10
Muito embora uma operação de adição possa ter um excedente eliminado do bit mais significativo,
isto não significa que o resultado está errado. Os dois exemplos anteriores mostram resultados corretos,
apesar do fato de que existe um excedente do bit mais significativo.

d. Overflow

Quando dois números que têm o mesmo sinal são somados um overflow vai ocorrer se o
resultado for maior que o maior valor representável no número de bits usado na representação.
Consideremos somar (+80)10 e (+50)10 usando um formato de oito bits. O resultado deveria ser
(+130)10. Contudo, como mostrado aqui o resultado é (-126)10:

0 1 0 1 0 0 0 0 (+80)10
+ 0 0 1 1 0 0 1 0 (+50)10
1 0 0 0 0 0 1 0 (-126)10

Isto não nos surpreende uma vez que sabemos que o maior número positivo de oito bits
em complemento de dois é (+127)10, e, portanto é impossível representar (+130)10. Muito
embora o resultado 100000102 se pareça com 13010 se o enxergarmos em uma forma sem sinal, o
bit de sinal indica que é um número negativo na forma com sinal, o que está claramente errado.

Em geral, se dois números de sinais opostos são somados, um overflow não pode ocorrer.
Intuitivamente isto acontece porque a magnitude do resultado não pode ser maior que a
magnitude do maior operando. Isto nos leva à definição de overflow em complemento de dois:

Se os números somados têm o mesmo sinal e o resultado for do sinal oposto, então um
overflow ocorreu e o resultado está incorreto. Se os números somados tiverem sinais
opostos então um overflow nunca pode ocorrer.

Subtração usando Complemento de 2

Os computadores não conseguem realizar as subtrações do mesmo modo que o ser


humano, eles apenas somam. O computador realiza as subtrações através do complemento de 1 e
complemento de 2. Utilizando o complemento de 2:

S A B A (B 1)
Caso 1: A > B
A = 010112 e B = 001102
A: 0 1 0 1 1 (decimal 11) 0 1 0 1 0
B: 0 0 1 1 0 (decimal 6) → complemento de 2 → + 1 1 0 1 0
Eliminar excedente (1) 0 0 1 0 1

Caso 2: A < B
A = 001102 e B = 010112
A: 0 0 1 1 0 (decimal 6) 0 0 1 1 0
B: 0 1 0 1 1 (decimal → complemento de 2 + 1 0 1 0 1
11) →
Carry (0) 1 1 0 1 1 complemento 0 0 1 0 0
Indica resultado negativo  + 1
= -
1 0 1
510

Caso 3: Overflow
A = -110 e B = -810
1 0 0 0
A: 0 0 0 1 (decimal 1) → complemento de 2 → 1 1 1 1 (-1)10
B: 1 0 0 0 (decimal 8) → complemento de 2 → + 1 0 0 0 (-8)10
Soma (1) 0 1 1 1 (+7)10

Não é de nos causar espanto uma vez que sabemos que o maior número negativo de
quatro bits em complemento de dois é (-8)10, e, portanto é impossível representar (-9)10. Assim:

Se um número positivo for subtraído de um número negativo e o resultado for negativo, ou


se um número negativo for subtraído de um número positivo e o resultado for positivo,
então um overflow aconteceu. Se os números subtraídos tiverem o mesmo sinal, então um
overflow nunca vai acontecer.

Na figura x.x mostra a combinação de operações, operandos e resultados que implicam um


overflow.
Operação Operando A Operando B Resultado

A+B 0 0 <0

A+B <0 <0 0


A-B 0 <0 <0

A-B <0 0 0
Figura x.x Condições de ocorrência de overflow nas operações de soma e de subtração

Exercícios

1. Converter os seguintes valores decimais para binário


a. 128 h. 16,384 o. 0,12510
b. 4096 i. 32,768 p. 0,062510
c. 256 j. 6,334 q. 0,710
d. 65536 k. 12,334 r. 47,4710
e. 254 l. 23,465 s. 53,387610
f. 9 m. 5,643
g. 1024 n. 57,310

2. Converter os valores decimais do problema 1 para octal


3. Converter os valores decimais do problema 1 para hexadecimal
4. Converter os seguintes números binários para decimal
a. 1001 1001 e. 1111 1111 i. 1110 0110
b. 1001 1101 f. 0110 1001 j. 1001 0111
c. 1100 0011 g. 0101 1011 k. 0000 1111
d. 0000 1001 h. 1011 1001 l. 0111 1111
m. 1010 0101 n. 0100 0101 o. 0101 1010

5. Converta os valores binários do problema 4 para octal


6. Converta os valores binários do problema 4 para hexadecimal
7. Converta os seguintes valores hexadecimais para binário
a. 0ABCD f. 0DAB
b. 1024 g. 4321
c. 0DEAD h. 334
d. 0ADD i. 45
e. 0BEEF j. 0E65
8. Converta os seguintes números como indicado usando o menor número de dígitos possível para o
resultado
a. 4710 para um binário sem sinal
b. –2710 para binário em sinal e magnitude
c. 21316 para base 10
d. 10110.1012 para base 10
e. 34.62510 para base 4
9. Converta os seguintes números como indicado usando o menor número de dígitos possível para o
resultado
a. 0110112 para base 10
b. 0110112 para base 16
c. 55.87510 para binário sem sinal
d. 132.24 para base 16
10. Converta .2013 para decimal
11. Encontre o equivalente decimal do número de quatro bits em complemento de dois 1000.
12. Ache o equivalente decimal do número de quatro bits em complemento de um 1111.
13. Para um dado número de bits, existem mais números inteiros representáveis em complemento de um ou
de dois? Ou o número é o mesmo?
14. Realize as seguintes somas e subtrações binárias:
a. 1101 + 110 e. 1111 + 1
b. 1000 - 111 f. 10001 - 1110
c. 101011 + 101010 g. 111 + 11
d. 10100 - 1111 h. 10101 - 1010

15. Qual o complemento de 1 dos seguintes números binários:


a. 10011 d. 110
b. 0001 e. 1001
c. 0000 f. 01011

16. Forneça o complemento de 2 dos seguintes números:


a. 0110
b. 0001
c. 0000
d. 110
e. 1100
f. 10101
17. Utilizando o complemento de 1 realize as seguintes subtrações binárias:
a. 1100 – 0001
b. 0100 - 1001
c. 11 – 01
d. 011 - 100

18. Realize os seguintes cálculos hexadecimais e apresente as respostas em hexadecimal.


e. 1234 +9876
f. 0FFF - 0F34
g. 100 - 1
h. 0FFE – 1

19. Mostre os resultados da soma dos seguintes pares de números de cinco bits (i.e., um bit de sinal e
quatro bits de dados) em complemento de 2 e indique se overflow acontece ou não para cada caso.

1 0 1 1 0
+ 1 0 1 1 1

1 1 1 1 0
+ 1 1 1 0 1

1 1 1 1 1
+ 0 1 1 1 1

Códigos Binários
Vimos como números negativos podem ser representados no sistema binário por
diferentes métodos. Em particular foram examinados os métodos, sinal magnitude,
complemento de um, e complemento de dois. Cada método tem sua vantagem que o
torna apropriado para certas aplicações. A convenção sinal-magnitude, por exemplo, é
mais desejável quando os números binários são convertidos em um formato decimal e
indicados em um display eletrônico. A convenção complemento de dois, entretanto, é a
representação mais eficiente de números binários para processamento aritmético.
Certamente, muitas outras representações de números binários são possíveis além
destas três. Uma restrição importante que precisa ser colocada sobre qualquer
representação binária é que ela representa unicamente valores numéricos. Seria
insensato, por exemplo, usar um código binário para representar dois valores binários
diferentes, pois teríamos como resultado a ambigüidade. Nesta seção, temos como
interesse principal as diferentes representações binárias de inteiros positivos. Veremos
como diferentes códigos binários são interpretados, e como variadas aplicações fazem
uso eficiente dos códigos disponíveis.
Códigos Binários Ponderados

Códigos binários ponderados são aqueles que obedecem aos princípios de


ponderamento posicional. Cada posição do número representa um peso especifico. Por
exemplo, das seções anteriores nos é familiar o código binário natural. “Natural” neste
caso refere-se ao fato que a seqüência de contagem binária 0, 1, 10, 11, 100, 101, ...,
corresponde exatamente aos valores numéricos zero, um, dois, três, quatro, cinco, .... A
conversão de um número binário natural em um número decimal equivalente é
facilmente realizada pelo ponderamento de cada digito do número binário por uma
apropriada potência inteira de dois, e somando os resultados. Conseqüentemente, o
código binário natural é classificado como código binário ponderado.

É freqüentemente necessário representar dígitos decimais por códigos binários.


Desde que dez dígitos decimais precisam ser codificados, pelo menos quatro dígitos
binários são necessários para representá-los. Um código binário natural de quatro
dígitos comumente usado para representar dígitos decimais é referido como o código 8-
4-2-1, ou código BCD. Os números 8, 4, 2, e 1 correspondem aos pesos da posição do
digito no número binário. A tabela 1 mostra os códigos 8-4-2-1, 4-2-2-1, 2-4-2-1, 5-2-
1-1 e o Bi-Quinario; todos são códigos ponderados, cada um representando um digito
decimal por um nibble, exceto o Bi-Quinario. O número 76210, por exemplo, seria
representado em BCD como

0111 0110 0010


7 6 2

Bi-Quinário(2 entre 7)
Decimal 8421 4221 2421 5211 XS3 Gray Johnson 5-0 4-3-2-1-0
0 0000 0000 0000 0000 0011 0000 00000 01 00001
1 0001 0001 0001 0001 0100 0001 00001 01 00010
2 0010 0010 0010 0011 0101 0011 00011 01 00100
3 0011 0011 0011 0101 0110 0010 00111 01 01000
4 0100 1000 0100 0111 0111 0110 01111 01 10000
5 0101 0111 1010 1000 1000 0111 11111 10 00001
6 0110 1100 1100 1010 1001 0101 11110 10 00010
7 0111 1101 1101 1100 1010 0100 11100 10 00100
8 1000 1110 1110 1110 1011 1100 11000 10 01000
9 1001 1111 1111 1111 1100 1101 10000 10 10000

Verificador e Gerador de Paridade


Na transmissão de informação digital, é desejável dispor de algum meio de
detecção de erro de transmissão. Um método é a verificação de paridade. A método de
paridade requer que um simples bit seja adicionado a palavra de dados. Este bit é
referenciado como o bit de paridade, e seu valor determina o número de dígitos 1’s na
palavra de dados. Em sistemas de paridade impar, o bit de paridade é atribuído um
valor de 1 para tornar o número total de 1’s da palavra a ser transmitida impar; já nos
sistemas de paridade par, ao bit de paridade é atribuído o valor de 1 para tornar o
número total de 1’s da palavra a ser transmitida par. A figura a seguir ilustra a aplicação
de paridade par e impar a algumas palavras arbitrarias de 8bits. Somente um sistema
de paridade (par ou impar) é escolhido e consistentemente usado em um particular
projeto digital.

Na transmissão, o bit de paridade é transmitido juntamente com os N bits de


dados. Na recepção, o bit de paridade é mais uma vez gerado, e comparado com aquele
que foi transmitido [Fig. 3.25(a)]. Se os dois bits de paridade P e P’ são diferentes, um
flag de erro é gerado. A verificação de paridade é um meio útil de eliminar os erros mais
comuns produzidos por ruídos na transmissão. Se a probabilidade de erro por ruído em
uma palavra simples é 1/N, a probabilidade de dois erros por ruído na mesma palavra é
1/N2, que é muito menor quanto maior for N.

Quantidade de 1’s na Bit de Palavra de Dados Quantidade de 1’s na Bit de Palavra de Dados
palavra de dados Paridade de 8bits palavra de dados Paridade de 8bits
5 0 11010011 5 1 01011110

4 1 01011010 4 0 01110010

3 0 01100100 5 1 10011011

2 1 10000100 6 0 11100111

8 1 11111111 3 1 10010010

1 0 00000001 7 1 01111111

Figura Exemplo mostrando como um bit de paridade adicionado a uma palavra de


dados de 8bits.
RUÍDO

Gerador de
Transmissão RECEPTOR
palavras de
4 bits

A A
B B
C P1 C P2
D D Flag
de erro
P' P'

Gerador Verificador
do bit de do bit de
Paridade Paridade

Fig. Transmissão de dados binários é testado pela geração de um bit

Exercício 8: Projete um sistema verificador e gerador de paridade para uma


palavra de dados de um nibble.

Código de Hamming
Em 1950, Richard Hamming do laboratório Bell desenvolveu um código que
poderia ser usado para detectar e corrigir erros baseados na distância mínima. O
método foi desenvolvido para corrigir erros simples de uma palavra código, em binário,
composta pelos m bits de dados e h bits de verificação.

Para se determinar à quantidade h de bits de verificação utiliza-se a fórmula: 2h


m + 1.

Os bits da palavra de código são numeradas consecutivamente, começando com o


bit 1 na extremidade esquerda. Os bits que são potências de 2 ( 1, 2, 4, 8, 16, etc.) são
bits de verificação. Os restantes (3, 5,6,7, 9, etc) são preenchidos com os m bits de
dados. Cada posição dos bits de dados na palavra código é escrita como um somatório
de potências de 2, por exemplo, a posição 7 = 1 + 2 + 4. Cada bit de verificação força a
paridade de algum conjunto de bits (aqueles que possuem em sua posição a potência de
dois do bit verificador), incluindo ele próprio, a ser par ou ímpar. Um bit pode estar
incluído em diversos cálculos de paridade.

Exemplo: Suponha que desejamos usar um código de Hamming para detectar e


corrigir erros de um bit em uma mensagem constituída de caracteres ASCII de 7 bits .

Solução:
Para determinar o número de bits verificadores utilizamos a fórmula: 2h m + 1.

2h 7+1 h=4

A palavra código terá comprimento n = 7 + 4 = 11. Os caracteres codificados


serão então enviados usando 11 bits, e os bits de dados (d) e verificação (h) serão
organizados da seguinte forma.

1 2 3 4 5 6 7 8 9 10 11
1 2 1+2 4 1+4 2+4 1+2+4 8 1+8 2+8 1+2+8
h1 h2 d1 h4 d2 d3 d4 h8 d5 d6 d7

Por exemplo, codificar o caracter ASCII H com um código de Hamming de


paridade par: H é representado pelo número binário 1001000.

A palavra de dados a ser transmitida é:

d1 d2 d3 d4 d5 d6 d7

1 0 0 1 0 0 0

na palavra código,

1 2 3 4 5 6 7 8 9 10 11
1 2 1+2 4 1+4 2+4 1+2+4 8 1+8 2+8 1+2+8
h1 h2 1 h4 0 0 1 h8 0 0 0
3,5,7,9,11 3,6,7,10,11 5,7 9,10,11
0 0 1 0

h1, 3, 5, 7, 9, 11 h1, 1, 0, 1, 0, 0 h1 = 0

h2, 3, 6, 7, 10,11 h2, 1, 0, 1, 0, 0 h2 = 0

h4, 5, 7 h4, 0, 1 h4 = 1

h8, 9, 10, 11 h8, 0, 0, 0 h8 = 0

Então a palavra código será 0 0 1 1 0 0 1 0 0 0 0.

Um outro modo para a obtenção dos bits verificadores consiste em se realizar a


operação de ou exclusivo dos valores das posições, da palavra código, que apresentarem
o bit 1. No nosso exemplo temos as posições 3 e 7. Assim,

0 0 1 1 = 3
0 1 1 1 = 7
0 1 0 0
atribui-se o resultado da direita para a esquerda nos respectivos bits hamming: h1 = 0,
h2 = 0, h4 = 1, h8 = 0.

Em nosso exemplo só havia dois bits com o valor 1. Caso existissem outros, por
exemplo, a posição 9, então pegaríamos o resultado anterior e faríamos o ou exclusivo
entre ele e a posição 9 em binário,

1 0 0 1 = 9
0 1 0 0
1 1 0 1
o que atribuiria aos bits verificadores os valores: h1 = 1, h2 = 1, h4 = 0, h8 = 1.

Detectando e Corrigindo Erros

Quando uma palavra código é recebida cada bit verificador é examinado para ver
se ele está com a paridade correta. Se a paridade, do bit verificador testado e os bits
correlacionados, está correta então esta linha gera um zero, caso contrário gera um 1.
Se a coluna de resultados for igual a zero, assume-se que a palavra código foi recebida
corretamente, se não o número binário formado dá a posição do bit errado, e este bit
pode então ser invertido para dar a palavra de código correta.

Por exemplo, vamos supor que recebemos a palavra código do nosso exemplo
com erro no bit de posição 11. Isto significa que recebemos a seguinte palavra:

1 2 3 4 5 6 7 8 9 10 11
0 0 1 1 0 0 1 0 0 0 1
fazendo a verificação de paridade temos

h1, 3, 5, 7, 9, 11 0, 1, 0, 1, 0, 1 1

h2, 3, 6, 7, 10,11 0, 1, 0, 1, 0, 1 1 Sentido de leitura


da posição com erro
h4, 5, 7 1, 0, 1 0

h8, 9, 10, 11 0, 0, 0, 1 1

Então, como a coluna apresentou valor diferente de zero, basta-nos inverter o


valor do bit da posição indicada (10112=1110).

Poderíamos ter chegado a este mesmo resultado utilizando o procedimento que


usa a operação de ou exclusivo. Faríamos então,

0 0 1 1 = 3 0 1 1 1 0 0 0 0
0 1 0 0 = 4 0 1 1 1 = 7 1 0 1 1 = 11
0 1 1 1 = 7 0 0 0 0 1 0 1 1
que nos dá a posição 11 com erro. Caso a palavra estivesse correta, este método
apresentaria 0 como resultado.
Uso de um código Hamming para corrigir erros em rajada

Os códigos de Hamming podem corrigir somente erros isolados. Entretanto, existe


um artifício que pode ser usado para transmitir a utilização de códigos de Hamming para
a correção de erros em rajada. Uma seqüência de k palavras de código consecutivas é
arranjada como uma matriz, com uma palavra de código por linha. Normalmente, os
dados seriam transmitidos uma palavra de códigos de cada vez, da esquerda para a
direita. Para corrigir erros em rajada, os dados devem ser transmitidos uma coluna por
vez, a partir da coluna situada mais à esquerda para a direita. para corrigir erros em
rajada os dados devem ser transmitidos uma coluna por vez, a partir da coluna situada
mais à esquerda. Quando todos os kbits tiverem sido enviados, a segunda coluna é
transmitida e assim sucessivamente. Quando o quadro chega ao receptor, a matriz é
reconstruída, uma coluna de cada vez. Se ocorrer um erro em rajada de comprimento k,
no máximo 1 bit em cada uma das k palavras de código terá sido afetado, mas o código
de Hamming pode corrigir um erro por palavra de código, e assim o bloco inteiro pode
ser restaurado. Esse método usa kr bits de verificação para tornar blocos de km bits de
dados imunes a um erro em rajada isolado de tamanho k ou menor.

You might also like