Académique Documents
Professionnel Documents
Culture Documents
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
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.
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.
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
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
Exemplos:
Aplicando a fórmula para um número binário (10101010)2, temos:
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
1025 8
(1) 128 8
(0) 16 8
(0) (2)
logo, (1025)10 = (2001)8
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
Conversão binário-hexadecimal-binário
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
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.
De forma similar ao método utilizado para converter números binários inteiros para
decimal, utiliza-se a seguinte regra genérica:
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
1x23+0x22+0x21+1x20+0x2-1+1x2-2+1x2-3+1x2-4 = 9,437510
Exemplo 1: Converter o número decimal 8,37510 para a seu equivalente na base binária.
8 2 810 = 10002
(0) 4 2
(0) 2 2
(0) (1)
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
Exemplo 2: Converter o número decimal 4,810 para a seu equivalente na base binária.
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.
- 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
1 1
1 0 1 1 = 11
+ 0 0 1 1 = 3
1 1 1 02 = 1410
1 1
1 1 0 = 6
+ 1 1 1 = 7
1 1 0 12 = 1310
Subtração Binária
Adição Octal
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
Subtração Hexadecimal
7 716 11910
- 3 B16 = - 5910
3 C16 6010
Figura 4 – Subtração hexadecimal
Representação de Números negativos
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:
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
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.
Complemento de 1 001012
Adiciona 1 +12
Complemento de 2 001102
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.
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.
(Minuendo) 1 0 1 1 0 0 1 1 1 0 1 1 0 0 1 1
1 0 1 0 0 0 1 0 1
+ 1 (End-around carry)
0 1 0 0 0 1 1 0 (Diferença)
Solução:
(Minuendo) 1 1 0 1 1 0 0 0 1 1 0 1 1 0 0 0
1 0 0 1 0 0 1 0 0
+ 1 (End-around carry)
0 0 1 0 0 1 0 1 (Diferença)
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
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.
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:
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
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
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
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
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
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.
Solução:
Para determinar o número de bits verificadores utilizamos a fórmula: 2h m + 1.
2h 7+1 h=4
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
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
h4, 5, 7 h4, 0, 1 h4 = 1
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.
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
h8, 9, 10, 11 0, 0, 0, 1 1
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