sdac modulo 1 sistemas numeracao
DESCRIPTION
apontamentos para estudantesTRANSCRIPT
SISTEMAS DIGITAIS E ARQUITETURA DE COMPUTADORES Módulo 1 – Sistemas de Numeração
214-2015 -1- V0beta
MÓDULO 1 Sistemas de Numeração 1. Apresentação
Duração de Referência: 30 horas Avaliação 2 testes (60%)+ Avaliação contínua (40% ) Este módulo pretende dotar o aluno com conhecimentos sobre a forma como os computadores utilizam valores binários para representar e efetuar operações com números inteiros e fracionários. Esta matéria vai permitir uma melhor compreensão acerca do funcionamento dos componentes eletrónicos constituintes de um computador e das suas principais características.
2. Objetivos de Aprendizagem Conhecer a estrutura de um Sistema de Numeração e os principais Sistemas de Numeração Efetuar a conversão de números entre os vários sistemas de numeração. Efetuar operações aritméticas (adição e subtração) em qualquer base de numeração. Representar números relativos (positivos e negativos) em código de complementos.
3. Âmbito dos Conteúdos
3.1. Estrutura de um sistema de Numeração. Noção de símbolo e noção de número como uma sequência de símbolos, onde os símbolos têm significância posicional. 3.2. Fórmula geral de significância posicional num sistema de base B: N = n ∑ i = 0 ABii 3.3. Principais Sistemas de Numeração utilizados: binário, octal, hexadecimal. 3.4. Conversão de números representados em qualquer base, para a base decimal, usando a fórmula geral de significância posicional. 3.5. Conversão de números em decimal para outras bases de numeração através do método das divisões sucessivas. 3.6. A importância da base binária como um sistema de numeração com dois símbolos 0 e 1, de fácil manipulação no contexto da arquitetura de um computador. 3.7. Operações aritméticas (adição e subtração) em qualquer base (base binária em particular). 3.8. Representação de números relativos (positivos e negativos), usando código de complementos. Adição e subtração de números em código de complementos
3. Bibliografia / Outros Recursos
CUESTA, L.; PADILLA, A.; REMIRO, F., Eletrónica Digital. Amadora:
McGrawHill, 1994. NUNES, Mário Serafim, Sistemas Digitais, 3ª ed.. Lisboa:
Editorial Presença, 1989. RODRIGUES, Pimenta; ARAÚJO, Mário, Projeto de
Sistemas Digitais, 2ª ed.. Lisboa: Editorial Presença, sd.
TAUB, Herbert, Circuitos Digitais e Microprocessadores. S. Paulo: McGrawHill,
1984.
Laboratório de eletrónica (hardware).
Retro/Vídeo Projetor.
Meios audiovisuais
SISTEMAS DIGITAIS E ARQUITETURA DE COMPUTADORES Módulo 1 – Sistemas de Numeração
214-2015 -2- V0beta
Introdução às Bases de Numeração
1. Representação numérica em diferentes bases
1.1 Base 10
A representação numérica comum utiliza a base 10. Isso significa que há 10 algarismos (ou
dígitos) diferentes, denotados pelos símbolos 0 a 9.
Usando apenas estes algarismos podemos representar qualquer número. Começando pelos
números mais simples, representáveis apenas por um dígito, temos:
0
1
...
9 10 aqui temos o primeiro acidente de contagem: esgotou-se a capacidade de representação de
números apenas com um dígito - passamos a usar dois dígitos, sendo que o da esquerda tem mais valor pela posição que ocupa - neste caso tem o seu valor multiplicado por 10, ou seja, pelo valor da base de numeração utilizada;
11
12 valor 10+2 - o dígito da esquerda tem o seu valor multiplicado por 10;
...
19
20 mais uma vez esgotaram-se os dígitos na primeira posição: aumenta-se 1 na posição seguinte; já
contamos 2 vezes a base, ou seja, vamos em 2x10; 21
..
25 valor 2x10 + 5 : o dígito da esquerda tem o valor multiplicado por 10;
...
99 este é o maior número com 2 algarismos
100 esgotaram-se agora os dígitos na segunda posição; isso significa que contámos 10 vezes a
base, ou seja 10x10; um dígito na 3ª posição vale a base ao quadrado;
...
317 neste caso, o 3 vale pela base2, o 1 pela base e o 7 pelo seu valor;
...
999 maior número com 3 algarismos
1000 a posição seguinte vale pela base ao cubo, ou seja 103.
1.2 Significado da representação numérica
Em suma, da direita para a esquerda: um algarismo na primeira posição vale por si próprio,
na segunda vale pela base, na terceira pela base ao quadrado, na quarta pela base ao cubo
e assim sucessivamente. Por exemplo: 8317 vale 8x103 + 3x102 + 1x10 + 7
Uma vez que 100 é 1, podemos uniformizar a representação: 8317
vale 8x103 + 3x102 + 1x101 + 7x100
Em concordância com esta notação designamos as posições, da direita para esquerda, por
posição 0, 1, 2 e assim sucessivamente. E designamos a potência respetiva por peso. Assim,
dizemos que um algarismo na posição 0 tem peso 100, ou seja 1; na posição 1 tem peso 101,
ou seja 10; na posição 2 tem peso 102 ou seja 100, etc.
Genericamente, um dígito di na posição i tem peso 10i, ou seja, vale
dix10i
SISTEMAS DIGITAIS E ARQUITETURA DE COMPUTADORES Módulo 1 – Sistemas de Numeração
214-2015 -3- V0beta
Em geral, dado um número com os dígitos:
dn dn-1 d2 d1 d0
o seu valor numérico
é:
dn x10n + dn-1 x10n-1 + ... + d2 x102 + d1 x101 + d0 x100
1.3 Contar em base 8 (octal)
O que vimos para a base 10 generaliza-se facilmente para outras bases.
Seja por exemplo a base 8. Em vez de 10 temos agora 8 dígitos - e para não inventar o que
já está inventado, valos representá-los pelos símbolos 0 a 7.
O processo de contagem é em tudo semelhante ao usado em base 10. Começamos com os
números representáveis apenas com um algarismo, que agora vão apenas até 7:
0
1
...
7 último número representável apenas com um algarismo;
10 aqui temos o primeiro acidente de contagem; esgotada a capacidade de representação com um
dígito, passamos a usar dois; o dígito da esquerda vale 1xbase; (em decimal seria 1x8)
11
12 número 10+2 em octal; (em decimal seria 1x8+2 ou seja o número 10)
...
17
20 mais uma vez esgotaram-se os dígitos na primeira posição: aumenta-se 1 na posição seguinte; já
contamos 2 vezes a base, ou seja, vamos em 2xbase (em decimal seria 2x8); 21
...
77 este é o maior número com 2 algarismos em base 8;
100 contámos base * base vezes; o dígito 1 na terceira posição vale a base2 (em decimal seria 2x82);
101
...
777 maior número com 3 algarismos, na base 8;
1000
1.4 Contar em Base 16 (hexadecimal)
Seja agora a base 16. Em base 16 deve haver 16 algarismos; vamos representar os
primeiros 10 da maneira habitual, de 0 a 9 e a partir daí vamos usar letras: A, B, C; D E e F.
De resto, o processo de contagem é semelhante, sendo que agora os números
representáveis com um dígito são vão até F (15 em decimal):
0
1
...
SISTEMAS DIGITAIS E ARQUITETURA DE COMPUTADORES Módulo 1 – Sistemas de Numeração
214-2015 -4- V0beta
9
A nada de especial, aqui; passamos para o 10º dígito, representado pela letra A;
B
C
D
E
F
maior valor representável com um algarismo (em decimal seria o número 15);
10
11
esgotaram-se os dígitos, logo esgotou-se a capacidade de representação de números só com
um dígito; passamos a usar dois; o 1 da esquerda vale a base (em decimal seria o número 16);
12
...
19
1A
...
1B
número 10 + 2, ou seja 1xbase + 2 (em decimal seria 16 + 2);
20
...
99
contámos duas vezes o número de dígitos; vamos em 2xbase (em decimal seria 2x16);
9A
9B
...
9F
nada de especial: a seguir ao algarismo 9 vem o algarismo A;
A0
A1
...
FE
nada de especial: a seguir ao algarismo 9 vem o algarismo A;
FF
maior número com dois dígitos em base 16;
100 contámos (base X base) vezes; vamos em base2 (seria 162 em decimal);
...
FFF maior número com 3 algarismos em base 16;
1000
1.5 Contar em base 2 ("binário")
Especialmente importante para nós, nesta cadeira, é a base 2, que tem apenas dois dígitos:
0 e 1. O processo de contagem é idêntico ao praticado em qualquer outra base. É claro a
exiguidade da base leva a que, rapidamente, se gerem sequências com muitos dígitos:
0
1 maior número com 1 dígito;
10 esgotada a capacidade de representação com um dígito, passamos a usar dois dígitos; o
dígito da direita vale 1 vezes a base ou seja 2;
11 número maior com dois dígitos;
100 passamos a três dígitos; o da esquerda vale base2 (22); 101
110
111 maior número com 3 algarismos;
1000
1.6 Generalização da representação numérica
SISTEMAS DIGITAIS E ARQUITETURA DE COMPUTADORES Módulo 1 – Sistemas de Numeração
214-2015 -5- V0beta
O conceito de representação numérica apresentado no ponto 1.1 para a base decimal
generaliza-se facilmente para outras bases.
Em qualquer base um número representa-se como uma sequência de dígitos. Sendo B a
base, um dígito di na posição i tem peso Bi ou seja vale dixBi
Em geral, dado um número com os dígitos:
dn dn-1 d2 d1 d0
o seu valor numérico, dada a base B,
é:
dn xBn + dn-1 xBn-1 + ... + d2 xB2 + d1 xB1 + d0 xB0 (1)
Para clarificar a representação e evitar situações de ambiguidade, explicitamos a base,
usando a seguinte notação:
(312)10 - a sequência de dígitos 312 na base 10 (312)8
- a sequência de dígitos 312 na base 8
(312)16 - a sequência de dígitos 312 na base 16
O valor respetivo de cada um, em decimal, é o que resulta da expressão anterior. Assim:
(312)10 = 3x102 + 1x101 + 2x100
(312)8 = 3x82 + 1x81 + 2x80
(312)16 = 3x162 + 1x161 + 2x160
Obviamente os três números representados são todos diferente. Seria disparate dizer, por
exemplo, "o número 312 em base 10 é o mesmo número 312 em base 8". Todas as
sequências de dígitos iguais em bases diferentes representam números diferentes (exceto),
obviamente as que têm apenas um dígito). Pode confirmar, por exemplo, que:
(312)10 = (470)8 = (138)16
(202)10 = (312)8 = (CA)16
(786)10 = (1442)8=(312)16
1.7 A parte fracionária
A representação estende-se facilmente para a parte fracionária. Dada uma sequência de
dígitos na base B
dn dn-1 ... d2 d1 d0 . d-1 d-2 ... d-m
em que o ponto separa a parte inteira e a parte fracionária, o valor associado é:
dnBn + dn-1Bn-1 + ... + d2B2 + d1B1 + d0B0 + d-1B-1 + d-2B-2 + ...
Por exemplo, a sequência 42.57 em decimal vale:
4x101 + 2x100 + 5x10-1 + 7x10-2
Em base 10, o dígito à direita do ponto tem peso 10-1, ou seja uma décima; o dígito seguinte
tem peso 10-2, ou seja uma centésima; e assim sucessivamente. Genericamente, o dígito de
posição i à direita do ponto (dita posição -i) tem peso base-i.
SISTEMAS DIGITAIS E ARQUITETURA DE COMPUTADORES Módulo 1 – Sistemas de Numeração
214-2015 -6- V0beta
Exemplo:
(42.57)10 = 4x101 + 2x100 + 5x10-1 + 7x10-2
(42.57)8 = 4x81 + 2x80 + 5x8-1 + 7x8-2
(4C.A7)16 = 4x161 + 12x160 + 10x16-1 + 7x16-2
(10.01)2 = 2 + 1/4
2. Operações
2.1 Soma
Contar é basicamente tudo o que precisamos para fazer as operações elementares de somar
e subtrair. Vamos, agora, rever os procedimentos que usamos para a realização destas
operações.
Exemplo (em base 10), da direita para a esquerda: - ao primeiro algarismo, 3, juntamos 2 (a partir de 3 contamos mais 2);
- a partir de 2 contamos mais 5; - a partir de 8 contamos 6, para dar 14; aqui há um incidente: a contagem ultrapassa 10, ou seja, a base; deixamos como resultado o algarismo das unidades 4 e juntamos os restantes 10 somando 1 na posição seguinte; dizemos, então, que há 1 de transporte (ou, informalmente, e vai um);
O mecanismo para somar é exatamente igual em qualquer outra base. Vejamos um exemplo
em base 8:
Exemplo (em base 8), da direita para a esquerda: - 3 e 2 dá 5;
- 6 e 5 dá 13 (a partir de 6 contamos 5 vezes, ou seja: 7 10 11 12 13 ) como
habitualmente, deixamos o algarismo 3 no resultado e juntamos o 10
fazendo o transporte de 1 para a posição seguinte;
- ...
Outro exemplo, ainda em base 8:
- 3 mais 2 dá 5;
- 2 mais 6 (ou, se preferir, 6 mais 2) dá 10; ou seja dá 0 e vai 1;
- 1 mais 6 mais 5 dá 14, ou seja dá 4 e vai 1;
- ...
Outro exemplo, agora em base 16:
- 2 mais 3 dá 5
- 2 mais 6 dá 8
- 6 mais 5 dá B (ou seja, contando a partir de 6: 7 8 9 A B )
- ...
2 1 8 2 3
+ 2 6 5 2
2 4 4 7 5
2 1 6 3
+ 2 5 2
2 4 3 5
2 1 6 2 3
+ 2 5 6 2
2 4 4 0 5
2 1 6 2 3
+ 2 5 6 2
2 3 B 8 5
SISTEMAS DIGITAIS E ARQUITETURA DE COMPUTADORES Módulo 1 – Sistemas de Numeração
214-2015 -7- V0beta
Outro exemplo, em base 16
- 3 + D dá 10 ( D+3 => E F 10 )
- 1 + A + 6 dá 11 ( B+ 6 => C D E F 10 11)
- 1 + 6 + 5 dá C
- F + 2 dá 11
- ...
2.1 Subtração
O mecanismos que usamos vulgarmente para fazer a subtração aplicam-se também, com os
mesmos princípios, quer à base 10 quer às outras bases.
Seja uma operação elementar, por exemplo 7-2. A maneira mais básica de fazer a operação
é mais uma vez contar - neste caso contar de baixo (i.e. do subtrativo) para cima (i.e. para o
aditivo). O número de vezes que contarmos é, justamente, a diferença.
Para fazer a subtração de números com mais algarismos generalizamos o processo
seguindo da direita para a esquerda. Em cada posição fazemos a diferença entre o algarismo
de cima e o de baixo.
Exemplo: neste caso faríamos:
- 2 para 7: conta 3 4 5 6 7, ou seja 5 vezes; - 6 para 3 conta 7 vezes e
vai um de transporte...
- o transporte soma ao 7, assim fazemos 8 para 9...
- ...
Recorde que, no caso da subtração, o mecanismo é juntar o transporte ao algarismo de
baixo. Ao fazer 6 para 3 estamos na realidade a fazer a diferença para 13 - por consequência
temos que subtrair 10 na posição seguinte. Podemos fazer isso retirando 1 ao algarismo de
cima ou, como fazemos habitualmente, adicionando 1 ao de baixo.
Salienta-se ainda a situação de transporte evidenciada no seguinte exemplo:
Neste caso ao fazer 7 para 2 há um transporte. O transporte junta-se ao
9 para fazer 10 para 13, havendo por isso um novo transporte.
Note bem que apesar de nesta situação pensarmos 0 para 3 e realidade
é que estamos a fazer 10 para 13; não nos podemos esquecer deste
transporte.
Seja agora o seguinte exemplo em base 8
- 2 para 7 dá 5
- 6 para 3 dá 5 (conta 7 10 11 12 13, ou seja 5 vezes ) e vai um
- (4+1) para 4 dá 7 (conta 6 7 10 11 12 13 14, i.e. 7 vezes) e vai um
- 1 para 2 dá 1
Um outro exemplo em base 8
- 2 para 0 dá 6 (conta 3 4 5 6 7 10) e vai um;
- 7 + 1 dá 10; 0 para 3 dá 3, e vai um;
- 5 e 1 dá 6; 6 para 4 dá 6 e vai um;
2 F 6 A 3
+ 2 5 6 D
3 1 C 1 0
2 9 3 7 - 7 6 2 2 1 7 5
2 9 3 2 - 7 9 7 2 1 3 5
2 4 3 7 - 4 6 2 1 7 5 5
2 4 3 0 - 5 7 2 1 6 3 6
SISTEMAS DIGITAIS E ARQUITETURA DE COMPUTADORES Módulo 1 – Sistemas de Numeração
214-2015 -8- V0beta
Um exemplo em base 16:
- A para 2 dá 8 (conta B C D E F 10 11 12 ) e vai um
- 7+1 dá 8; 8 para C dá 4;
- 5 para B dá 6;
- 0 para C dá C;
Outro exemplo em base 16
2.2 Somar e subtrair em binário
As operações em binário são em tudo semelhantes. A exiguidade do número de dígitos faz
com que as operações sejam muito estilizadas.
Exemplo:
0+1 dá 1;
1+1 dá 0 e vai 1; 1+1+1 dá 1 e vai 1;
...
Na prática tudo se resume a saber somar dois dígitos ou, no
máximo, três, quando há transporte. As possibilidade de soma de dois dígitos são apenas:
0+ 0 que dá 0
1+ 0 que dá 1
1+ 1 que dá 0 e vai 1
Na soma de três dígitos há apenas uma possibilidade adicional:
1+1+1 que dá 1 e vai 1
Na subtração as possibilidades também são muito limitadas.
Exemplo:
1 para 1 dá 0;
1 para 0 dá 1, e vai um;
1 e 1 dá 0 (ou seja 10) para 1 (ou seja 11) dá 1 e vai um;
1 e 0 dá 1 para 1 dá 0;
...
3. Conversão "base" => decimal
Consideremos agora o problema da conversão de um número de uma base qualquer para
decimal, ou seja, o problema de dado um número numa base B obter a representação do
mesmo número em base 10.
Para resolver este problema, basta atender à forma geral de representação indicada no
ponto 1.6. Dado uma sequência de algarismos
dn dn-1 ... d2 d1 d0 . d-1 d-2 ... d-m
numa base B o respetivo valor numérico é:
anBn + an-1Bn-1 + ... + a2B2 + a1B1 + a0B0 + a-1B-1 + a-2B-2 + ...
C B C 2 - 5 7 A C 6 4 8
1 2 3 4 - 5 7 A C B A
1 0 1 1 0
+ 1 0 1 1 1
1 0 1 1 0 1
1 0 1 1 0 1
- 1 0 1 1 1
1 0 1 1 0
SISTEMAS DIGITAIS E ARQUITETURA DE COMPUTADORES Módulo 1 – Sistemas de Numeração
214-2015 -9- V0beta
A fórmula genérica de representação de um número em formato posicional é então:
Número = ∑ai Bi para todo o i desde +n a -n
i
Para converter um número para base 10 basta calcular esta expressão. Assim, por exemplo:
4. Conversão decimal => "base"
Vejamos agora o problema da conversão de decimal para uma outra base. Ou seja o
problema de dado um número em Base 10 encontrar a representação do mesmo número
noutra base qualquer.
4.1 Parte inteira do número
Vamos considerar, primeiro, apenas a parte inteira. Para converter um número para base B
aplica-se o seguinte método:
- dividir o número, sucessivamente, pela Base até obter o quociente 0;
- o resultante obtém-se juntando, por ordem inversa, os restos dessas divisões sucessivas;
Note que, ao fazer uma divisão pela Base o resto é necessariamente um número menor que a base -ou seja este resto é um algarismo da base. Deste modo, juntando os restos sucessivos estamos a formar um número válido na Base.
Exemplos:
1) - Converter 12(10) para binário
Dado um número decimal, para convertê-lo em binário, basta dividi-lo
sucessivamente por 2, anotando o resto da divisão inteira (da direita para a esquerda):
12(10) = 1100(2)
2) - Representar (1003)10 em octal
1003 : 8 = 125 * 8 + 3
(312)10 = 3x102 + 1x101 + 2x100 = 3x100 + 10 + 2 = 312
(312)8 = 3x82 + 1x81 + 2x80 = 3x46 + 8 + 2 = 148
(312)16 = 3x162 + 1x161 + 2x160 = 3x256 + 16 + 1 = 785
(1001) 2 = 1x23 + 0x22 + 0x21 + 1x20
Exercício de aplicação
= 8+1 = 9
(4.02)8 = 4x80 + 0x8-1 + 2x8-2 = ...
(A.BC)16= 10 + 11x16-1 + 12x16-2 = ...
(101.101)2 = 4+1+1/2+1/16 = ...
12 2 0 6 2
0 3 2 1 1
1003
2
8 3 125 8
5 15 8 7 1
SISTEMAS DIGITAIS E ARQUITETURA DE COMPUTADORES Módulo 1 – Sistemas de Numeração
214-2015 -10- V0beta
125 : 8 = 15 * 8 + 5
15 : 8 = 1 * 8 + 7
1 : 8 = 0 * 8 + 1
o resultado é (1753)8.
3) – Converter 1003 para hexadecimal
1003 : 16 = 62 * 16 + 11 (=B)
62 : 16 = 3 * 16 + 14 (=E)
3 : 16 = 0 * 16 + 3
o resultado é (3EB)16.
4) Converter número 1003 em binário
1003 : 2 = 501 * 2 + 1
501 : 2 = 250 * 2 + 1 250 : 2 = 125 * 2
+ 0
... o resultado é ( ......
011)2.
4.1.1 - Uso da máquina de calcular
Quando se pretende usar o método dos restos das divisões sucessivas, fazendo as contas
de dividir com a máquina de calcular, não nos podemos esquecer que a maioria dos
resultados (quocientes) aparece com parte inteira e parte decimal.
- A parte inteira segue para próxima divisão se for maior do que a base ou fica como
algarismo de maior peso do número final.
- A parte decimal deve ser multiplicada pela base para se obter o algarismo inteiro do resto
da divisão.
Exemplo:
Dado 300 (10) converter para a base 8.
Usando a máquina de calcular
- Primeira divisão 300:8= 37, 5
A parte inteira 37 passa para a próxima divisão e a parte decimal 0,5*8=4 é o primeiro resto
- Segunda divisão 37:8=4,625
As divisões param aqui, porque a parte inteira é menor do que a base. O último resto é
0,625*8 = 5 .O último quociente é 4.
Assim 300 (10) = 454(8)
4.2 Parte fracionária do número
Vejamos agora a parte fracionária. Aqui o método consiste em multiplicar o número pela
base e recolher parte inteira do número resultante da multiplicação. Mais uma vez,
repare que multiplicando um número só com parte fracionária (ie com parte inteira 0) pela
base B se obtém um número menor que B - ou seja um algarismo da base.
Por exemplo: converter (0.6328125) para octal
0.6328125 * 8 = 5,0625
0.0625 * 8 = 0,5
0,5 * 8 = 4,0 o resultado é
(0.504)8.
1003
2
16 11 62 16 14
5
3
SISTEMAS DIGITAIS E ARQUITETURA DE COMPUTADORES Módulo 1 – Sistemas de Numeração
214-2015 -11- V0beta
Assim: em cada passo multiplica-se o número pela base. A parte inteira do resultado dá um
algarismo do número. Com a parte fracionária do resultado repete-se o procedimento.
Eventualmente, como acontece neste exemplo, obtemos um resultado com parte
fracionária 0 e o processo termina.
Nestas condições obtemos uma conversão exata - um número na base de conversão
exatamente igual ao original.
Mas nem sempre o processo corre tão bem. Vejamos estas duas conversões de um número
decimal para binário:
Exemplo: converter: converter (0.125)10 para binário
0.125 * 2 = 0.250
0.250 * 2 = 0.5
0.5 * 2 = 1.0
resultado (0.125) 10 = (0.001) 2.
Exemplo: converter (0.2) 10 para binário
0.2 * 2 = 0.4
0.4 * 2 = 0.8
0.8 * 2 = 1.6
0.6 * 2 = 0.2
0.2 * 2 = 0.4
...
Neste caso o processo não termina. Aliás, podemos até concluir que entra num padrão de
repetição, originando uma "dízima periódica infinita".
Nestas condições o número decimal original não pode ser representado com exatidão na
base 2. Eventualmente paramos e ficamos com uma representação aproximada. Por
exemplo, usando um máximo de 20 dígitos na parte fracionária, o resultado aproximado
seria:
(0.0010 0010 0010 0010 001) 2
4.3 Síntese sobre conversões
Está agora reunido o conjunto de instrumentos que vamos usar para conversão entre bases.
Para converter de uma qualquer base para decimal, utiliza-se a expressão geral indicada no
ponto 3.
Para converter de decimal para uma outra base B usamos o método de divisões sucessivas
apresentado no ponto 4.1.
Se o número tiver parte fracionária, fazemos a conversão separada da parte inteira e da
parte fracionária. A esta última aplicamos o método de multiplicações sucessivas
apresentado no ponto 4.2, tendo em conta que, neste caso, poderá não ser possível obter
uma conversão exata.
Finalmente, se o problema for converter entre duas bases B1 e B1 ambas diferentes da base
10, podemos:
1º) converter de B1 para base 10 2º)
converter da base 10 para B2.
JRG, www.iscte.pt/AC -12- T001-Bases-v001b
5. Bases "binárias"
5.1 Binário
Tudo o que se disse anteriormente é válido para binário como para qualquer outra base. Mas
em binário, havendo apenas dois dígitos, as expressões tomam em geral formas mais
simplificadas que permitem de alguma forma agilizar os processos de raciocínio.
Seja, por exemplo, a conversão de um número binário para decimal.
(101 1001)2 = 1x26 + 0x25 + 1x24 1x23 + 0x22 + 0x21 + 1x20
As potências de 2 multiplicam por 0 ou por 1 - no primeiro caso para dar 0: no segundo caso
para dar a própria potência de 2. Assim, podemos escrever de uma forma mais simplificada:
(101 1001)2 = 26 + 24 + 23 + 20
esta expressão acaba por ter uma leitura muito direta: o que interessa são os 1's do
número binário; o valor decimal é o que resulta das soma das potências de 2
correspondentes aos 1 do número binário.
Para este e para muitos outro efeitos convém por vezes ter presente os
valores das potências de 2. Vale a pena decorar estes valores pelo
menos até 210.
Podemos assim imaginar um número binário numa grelha onde os 1
presentes têm o valor da potência de 2 correspondente à posição onde
se encontram
Posição
Peso
Considerando um número neste grelha imaginária, o seu valor é o que resulta da soma dos
1's que o número contém. Por exemplo:
= 28 + 26 + 23 + 22= 256 + 64 + 8 + 4
5.2 Conversão decimal binário - método das subtrações
O mesmo tipo de modelo poderia ser usado para converter de decimal para binário. Trata-se,
afinal de contas, de colocar 1's na grelha até que a "soma" forme o número pretendido.
Seja, por exemplo, o número 300. É claro que seria excessivo colocar um 1 na posição 29
(512) ou mais para esquerda - isso faria desde logo o número maior que 512. Correto é
colocar um 1 no posição 28(256), tendo em vista formar um número maior que 256 (e menor
que 512).
20 1
21 2
22 4
23 8
24 16
25 32
26 64
27 128
28 256
29 512
210
1024
10 9 8 7 6 5 4 3 2 1 0
1024 512 256 128 64 32 16 8 4 2 1
1 0 1 0 0 1 1 0 0
SISTEMAS DIGITAIS E ARQUITETURA DE COMPUTADORES Módulo 1 – Sistemas de Numeração
2014-2015-2016 -13- V01beta
Tendo colocado o primeiro 1 na posição de valor 256, falta obter os 1´s respeitantes ao resto
do número, ou seja 44 (300-256). Aplicando o mesmo raciocínio, colocamos um 1 na posição
26(32) ficando a sobrar 12. E assim sucessivamente.
A este procedimento de conversão de decimal para binário chamamos método das
subtrações. Em suma o processo consiste em:
- decompor o número da soma de uma potência de 2 com outro fator;
- colocar 1 na posição correspondente à potência de 2 obtida;
- repetir o procedimento para a diferença;
Exemplo: converter 300
300 = 256 + 44 -> 28
44 = 32 + 12 -> 25
12 = 8 + 4 -> 23
4 = 4 + 0 -> 22
resultado (1 0010 1100)2.
5.3 Octal
A base fundamental para a computação digital é obviamente a base 2. As outras bases de
trabalho importantes são a base 8 ("octal") e a base16 ("hexadecimal") - ambas, elas
próprias, potências de 2.
Acontece que há uma relação muito simples entre a representação de um número em binário
e a representação do mesmo número em octal ou hexadecimal (ou, em geral, numa qualquer
outra base que seja potência de 2). De certa forma a representação nestas bases pode ser
vista como uma forma compacta de representação em binário e este é realmente o seu
principal interesse.
A relação de octal para binário é de um para três dígitos. Para converter um número de octal
para binário substitui-se cada dígito pela respetiva representação em binário, usado três bits.
Ao contrário, para converter um número de binário em octal, substitui-se cada grupo de 3 bits
por um algarismo octal.
Para estas conversões convém decorar a seguinte tabela que lista os números binários de 0
a 7 (representados em três bits).
Para "decorar" a tabela basta ter presente a grelha de três bits.
9 8 7 6 5 4 3 2 1 0
1 1 1 1
SISTEMAS DIGITAIS E ARQUITETURA DE COMPUTADORES Módulo 1 – Sistemas de Numeração
2014-2015-2016 -14- V01beta
Por exemplo:
5 é 4+1 ou seja 101
6 é 4+2 ou seja 110
Usando esta tabela podemos facilmente converter um número de octal para binário:
(163)8 = (001 110 011)2 = ( 1 110 011)2
(32.04)8 = ( 011 010 . 000 100 ) 2 = ( 11 010 . 000 1 ) 2
Igualmente podemos fazer as conversões contrárias, se necessário juntando 0s à esquerda
da parte inteira ou à direita da parte fracionária:
( 11001)2 = ( 011 001)2 = (31) 8
(11011.01101) 2 = ( 011 011.011 010) 2= (33.32)8
5.3 Hexadecimal
O interesse da base 16 (hexadecimal) é semelhante ao do octal. É uma representação
compacta de binário em que a cada dígito hexadecimnal correspondem 4 dígitos binários.
Para fazer a correspondência convém decorar a seguinte tabela.
Para "decorar" a tabela basta ter presente a grelha de colocação,
agora com 4 bits.
9 = 8 + 1 => 1001
12 = 8+4 => 1100
13 = 8 + 4 + 1 => 1101
Com base nestas tabelas podemos facilmente converter números de
hexadecimal para binário. Exemplo:
( 3A.0E ) 16 = ( 0011 1010 . 0000 1110) 2 = ( 11 1010 . 0000 111) 2
5.4 Conversão expedita octal <=> hexadecimal
Para converter rapidamente entre octal e hexadecimal o mais fácil é usar a conversão
intermédia para binário.
Assim, por exemplo para converter um número de hexadecimal para octal pode:
0 000
1 001
2 010
3 011
4 100
5 101
6 110
7 111
4 2 1
1 1
1 1
0 0 0000
1 1 0001
2 2 0010
3 3 0011
4 4 0100
5 5 0101
6 6 0110
7 7 0111 8 8 1000
9 9 1001
10 A 1010
11 B 1011
12 C 1100
13 D 1101
14 E 1110
15 F 1111
8 4 2 1
Exemplo
1
1
1 1
1 1 1
SISTEMAS DIGITAIS E ARQUITETURA DE COMPUTADORES Módulo 1 – Sistemas de Numeração
2014-2015-2016 -15- V01beta
1º) converter para binário, fazendo corresponder 3 dígitos binário a cada dígito octal; 2º)
reagrupar em grupos de 4 dígitos, se necessário acrescentando 0 à esquerda da parte
inteira ou à direita da parte fracionária;
3º) converter em hexadecimal, fazendo corresponder um dígito hexadecimal a cada grupo de
4 dígitos binário
Exemplo:
( 1A.0E ) 16 = ( 0001 1010 . 0000 1110) 2 = ( 011 010 . 000 011 100) 2= (32.034) 8
5.5 Outras considerações
Muitas vezes no Computador os bits aparecem em grupos ou palavras. Por exemplo, falamos numa máquina de 32 bits porque determinados elementos fundamentais da arquitetura da máquina e das operações nela realizadas ocorrem em blocos de 32 bits.
Seja, por exemplo, uma palavra de 4 bits. Com 4 bits é possível fazer 24 combinações
diferentes, desde 0000 a 1111. A primeira corresponde ao número 0 e a última corresponde
ao número 15 - o maior número inteiro que é possível representar com 4 bits
Em geral, com N bits:
- há 2N combinações diferentes;
- o maior número (inteiro sem sinal) representável é 2N-1.
O número seguinte é 2N e tem N+1 bits.
Uma sequência de 8 bits é vulgarmente designada por byte. Com um byte há 28 ou seja 256
combinações diferentes. O maior número 1111 1111 é 255 (FF em hexadecimal, 377 em
octal).
O número 210, 1024, é vulgarmente designada por 1k. Muitas vezes relaciona-se 1k com 10
bits, na medida em que com 10 bits podem-se fazer as tais 210 ou seja 1024 combinações.
Com 11 bits falamos em 2k e com 12 bits em 4k, ou seja:
211 = 2 x 210 = 2k
212 = 22 x 210 = 4k
Da mesma forma relaciona-se 1 Mega com 20 bits e 1 Giga com 30 bits:
1M = 220 ; 1G = 230 ; 1T=240 --40 bits
6. Representação de números (inteiros) em binário
6.2 Número e sinal
Toda a informação é representa no computador em 0s e 1s. No caso dos números inteiros
uma forma natural de representação é escrevê-los em binário.
Por exemplo: suponha que temos um computador onde os números são representados em
palavras de 8 bits. Usando uma destas palavras podemos representar números inteiros
(positivos) de 0 a 255 em binário. Se não chegar, podemos usar duas palavras para
representar cada número; sendo assim, os números já poderão ir de 0 a 216-1.
Por outro lado pode ser necessário representar números positivos e negativos. Nesse caso o
plano pode ser o seguinte: usar um bit para o sinal e os restantes para a magnitude.
SISTEMAS DIGITAIS E ARQUITETURA DE COMPUTADORES Módulo 1 – Sistemas de Numeração
2014-2015-2016 -16- V01beta
Seja por exemplo uma palavra com 8 bits. Podíamos usar o 8º bit para sinal, representando,
por exemplo os positivos com 0 e os negativos com 1. Assim, por exemplo
0000 1100 seria o +12
1000 1100 seria o -12
Os números representáveis seriam de + 27 ou seja + 127. O maior (mais positivo) seria:
0111 1111
e o menor (mais negativo) seria
1111 1111
O número 0 teria duas representações:
0000 0000 digamos o +0 1000
0000 digamos o - 0.
6.3 Representação em complemento
Uma alternativa mais interessante ao modelo anterior é a representação em complemento.
6.3.1 Complemento para 1
Definição: o complemento para 1 de um número de N bits é a diferença do número para 2N-1.
Ou seja, dado um número B de N bits seu complemento para 1 é, por definição:
(2N-1) - B.
Exemplo: calcular o complemento para 1 do número de 4 bits 0110
Faz-se a diferença para 24-1 ou seja, faz-se
1111 - 0110 =1001
A natureza da operação, em que fazemos a diferença para um número composto só por 1s,
sugere a seguinte:
Regra prática: para obter o complemento para 1 basta trocar cada um dos bits do número.
6.4.2 Complemento para 2
O complemento para 1 de um número de N bits é a diferença do número para 2N. Ou seja,
dado um número B de N bits o seu complemento para 2 é, por definição:
2N - B.
Exemplo: calcular o complemento para 1 do número de 4 bits 0110
Faz-se a diferença para 24 ou seja, faz-se
10000 - 0110 = 1010
Também aqui existe uma regra prática, ligeiramente mais complicada:
Regra prática: para fazer o complemento para 2 procede-se da direita para a esquerda e:
- mantém-se o número original até aparecer o primeiro 1
- a partir daí troca-se cada um dos bits;
Como é claro, o complemento para 1 é igual ao complemento para 2 mais 1. Se preferir pode
também fazer o complemento para 2 aplicando a seguinte regras:
1 0 0 0 0
- 0 1 1 0
1 0 1 0
SISTEMAS DIGITAIS E ARQUITETURA DE COMPUTADORES Módulo 1 – Sistemas de Numeração
2014-2015-2016 -17- V01beta
- 1º) trocar todos os bits (complemento para 1)
- 2º) somar 1
6.4.3 Representação em complemento
Muitas vezes os números negativos são representados em complemento. Assim, por exemplo, se houver 8 bits representam-se os números positivos da maneira normal e os negativos em complemento.
Vamos exemplificar, com 4 bits. Os números positivos são
representados da maneira habitual. Para os negativos é feito o
complemento para 2. Desta forma obteremos a representação indicada
na tabela-
Exemplo: o -5 é representado pelo complemento para 2 de 5, ou seja
0101 -> 1011
O interesse desta representação é que ela permite um tratamento muito
uniforme dos números negativos.
Imagine, por exemplo, que queríamos fazer a soma de dois números
com sinal. Dependendo do sinal a soma podia, na realidade, ser uma
subtração. Por exemplo, para fazer 7+(-5) teria que fazer 7-5. A
representação em complemento para dois resolve a questão de forma
simples: basta somar.
Exemplo: 7 + (-5)
0 1 1 1 <- 7
+ 1 0 1 1 <- -5
1 0 0 1 0 <- 2
fazendo a soma e descartando o bit de excesso obtemos, justamente, 2.
Aliás o mesmo bom comportamento acontece nestes outros casos:
Exemplo: 5 - 7 , ou seja, 5 + (-7), dá -2 (representado em complemento).
0 1 0 1 <- 5
+ 1 0 0 1 <- -7
0 1 1 1 0 <- -2
As contas anteriores justificam-se, também, algebricamente, sendo importante nalguns casos
a questão de descartar o bit de excesso - em particular nos casos em que esse bit é 1.
Seja por exemplo a diferença de dois números positivos A e B. Neste caso em vez da
diferença A-B podemos fazer a soma com o complemento ou seja A+(2N-B). Isto dá A-B+2N
que á quase o mesmo resultado. Nesta situação ao descartar o bit de excesso estamos
justamente a subtrair 2N. Assim, obtemos A+(2N-B) - 2N que é exatamente A-B.
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111 -8 1000
-7 1001
-6 1010
-5 1011
-4 1100
-3 1101
-2 1110
-1 1111
SISTEMAS DIGITAIS E ARQUITETURA DE COMPUTADORES Módulo 1 – Sistemas de Numeração
2014-2015-2016 -18- V01beta
0 1 1 1 <- 7 A
+ 1 0 1 1 <- -5 24-B
1 0 0 1 0 <- 2 A+(24-B)-24 (24 seria o valor do bit de excesso descartado)
Fica como exercício validar o mesmo raciocínio noutras circunstâncias. Por exemplo:
3-(-2) = 5 fazemos a soma com o complemento de -2 ou seja fazemos:
A + ( 2N- ( 2N-B) ) = A+B
3-5=-2 fazemos a soma com o complemento de 5, ou seja fazemos:
A + ( 2N-B) = 2N- ( A-B)
obtendo o resultado em complemento;
-2-3=-5 fazemos a soma do complemento de ambos, ou seja fazemos
( 2N-A)+( 2N-B) - 2N (por haver excesso)
obtendo o resultado em complemento;
6.4.4 Overflow
Seja como for, a capacidade de representação dos número em binário é sempre limitada.
Isso quer dizer que podemos fazer operações comuns (designadamente somas) de números
válidos que dariam como resultado números já não representáveis.
Por exemplo, se tivermos 8 bits e números sem sinal o maior número representável é 255.
Somando 140 + 140 obteríamos 280 que já não representável - seriam precisos 9 bits. Nesta
situação o resultado efetivo da operação (8 bits) seria 24.
1 0 0 0 1 1 0 0
+ 1 0 0 0 1 1 0 0
1 0 0 0 1 1 0 0 0
Nestas circunstâncias em que operando dois números válidos se obtém um número não
representável diz-se que estamos numa situação de overflow. Neste caso a situação é fácil
de reconhecer: há overflow se o bit de excesso der 1.
Tratando-se de números com sinal o overflow pode acontecer em duas situações: fazendo
uma operação que daria um número positivo maior do que o maior número positivo
representável; ou fazendo operação que daria um número negativo menor do que o menor
número positivo representável.
Seja de novo a situação com números de 4 bits.
O primeiro caso é protagonizado por uma soma de números positivos cujo resultado daria maior do que 7 (e que seria interpretável como número negativo !).
0 1 0 1 <- 5
+ 0 1 0 1 <- 4
0 1 1 1 0 <- -2
SISTEMAS DIGITAIS E ARQUITETURA DE COMPUTADORES Módulo 1 – Sistemas de Numeração
2014-2015-2016 -19- V01beta
O segundo caso é protagonizado pela soma de dois números negativos cujo
resultado seria menor que -8 (e que seria interpretável como número positivo
!).
7. Representação de caracteres
7.1 Código ASCII
Nos computadores digitais o texto é também, naturalmente, representado em bits. A
estratégia neste caso é codificar cada um dos caracteres que podem compor o texto, ou seja,
representar cada caracter por uma sequência de bits única e distinta.
A codificação clássica para este efeito é a que consta da tabela designada por código ASCII.
O código ASCII original usa 7 bits para representar cada caracter.
Genericamente, um texto é uma sequência de caracteres. Por exemplo, o texto representado
na figura é constituído pela seguinte sequência de caracteres:
letra O letra l
letra a
um caracter de mudança de linha
letra M letra u
...
Usando o código ASCII cada um destes bits seria representado por 7 bits. De acordo com a
Tabela este texto poderia ser representado pela sequência de bits: 100 1111
110 1100
110 0001
000 1010
110 1101
...
7.2 Particularidades importantes
O código ASCII tem algumas características importantes que interessa saber e que aliás têm
um papel essencial no processamento de caracteres.
Note para começar que os primeiros caracteres são especiais - correspondem a caracteres
de controlo, sem representação visível. O termo "de controlo" significa que o objeto que trata
o caracter o interpreta como um "comando" e não como um símbolo para "escrever". Alguns
destes caracteres são conhecidos: por exemplo o caracter 7 é o bell (campainha); quando
recebido por um terminal deverá originar um som. Os caracteres 10 e 13 são usados para
controlar as mudanças de linha. Por exemplo, uma impressora ao receber um caracter CR
(000 1101) deve "voltar ao início da linha" e ao receber o caracter LF (000 1010) deve
"mudar de linha".
Estes mesmos caracteres são, em muitas circunstâncias, usados nos ficheiros de texto para assinalar as mudanças de linha. Os detalhes dependem do editor de texto e do sistema operativo. Por exemplo, num comum ficheiro de texto em Unix a mudança de linha é assinalada pelo caracter 10 - também conhecido por \n que é a sua representação simbólica na linguagem C.
1 0 1 1 <- -5
+ 1 0 1 0 <- -6
1 0 1 0 1 <- 5
Ola Mundo,
bla, bla
SISTEMAS DIGITAIS E ARQUITETURA DE COMPUTADORES Módulo 1 – Sistemas de Numeração
2014-2015-2016 -20- V01beta
É importante notar que no código ASCII os grupos de algarismos, letras maiúsculas e letras
minúsculas têm códigos sequenciais. O código ASCII dos algarismos vai do 0 ao 9 por ordem
numérica. O código ASCII das letras minúsculas vai do a ao z por ordem numérica. O código
ASCII das letras maiúsculas vai do A ao Z por ordem numérica.
Esta circunstância está na base dos processos de ordenação dos caracteres
(designadamente da ordenação alfabética) e da aritmética de caracteres.
Por exemplo, podemos dizer que a letra B á maior que a letra A, uma vez que o código ASCII
de B representa um número binário maior que o código ASCII de A.
Em muitas circunstâncias representa-se o código de um caracter escrevendo o caracter entre
' '. Por exemplo
'a' representa o código ASCII da letra a
'5' representa o código ASCII do algarismo 5
'+' representa o código ASCII do sinal +
Assim, usando esta notação, podemos dizer que
'B' > 'A'
Os mesmos princípios permitem fazer "contas" com caracteres - na realidade são contas com
o código mas que têm significado lógico em termos dos caracteres envolvidos.
Assim, por exemplo, sabendo que o código ASCII da letra B é 100 0010 sabe que o da letra
C é 100 0011 e o letra F é 100 0110. Quer dizer:
'C' = 'B' + 1
'F' = 'C' + 3
Outro exemplo: pode obter o código ASCII da letra f somando ao código ASCII da letra a a
diferença entre o código ASCII de F e o de A. Ou seja, usando a mesma representação:
'f' = 'a' + ( 'F' - 'A')
Muitas vezes é necessário converter os caracteres que representam algarismos no valor numérico correspondente. O valor numérico de um caracter obtém-se fazendo a diferença para o caracter '0'. Por exemplo '3'-'0' = 3
ou seja a diferença entre o código ASCII do caracter '3' e do caracter '0' é, justamente, 3.
Repare ainda que no código ASCII os últimos 4 bits representam o número binário
correspondente ao algarismo. Por exemplo, os últimos 4 bits do código ASCII do algarismo
7 são 0111 e representam, justamente, o número binário 7.
7.3. O 8º bit: paridade
Normalmente os computadores usam palavras 8 bits ou múltiplos de 8 bits. Isto faz com que
sobre um bit na representação de cada caracter.
Este bit de sobra pode ter várias utilidades. Uma delas é ser usado como bit de paridade.
Imagine que está a transmitir texto sobre uma linha com ruído. Pode acontecer que a
transmissão adultere algum dos bits, levando os recetor a obter alguns caracteres errados.
Uma das formas de minimizar este problema á usar o 8º bit como bit de paridade. Assim, por
exemplo, ao mandar um caracter cujo código ASCII tenha um número par de 1s o 8º bit irá a
SISTEMAS DIGITAIS E ARQUITETURA DE COMPUTADORES Módulo 1 – Sistemas de Numeração
2014-2015-2016 -21- V01beta
0 e no caso contrário irá a 1. Nestas condições o recetor, confrontando o caracter recebido
com o bit de paridade pode detetar erros de transmissão.
Exemplo: o mesmo texto com bit de paridade
1 100 1111
0 110 1100 1
110 0001
...
7.4 Código ASCII de 8 bits
Outra utilização do 8º bit é a extensão do próprio código ASCII. Usando o 8 bit podem-se
acrescentar mais 128 caracteres ao código original, ficando assim o código com 256
caracteres. Esta possibilidade tem sido usada, em diversas variantes, para introduzir os
caracteres especiais, por exemplo os acentuados.
A imagem abaixo representa a tabela ASCII completa
SISTEMAS DIGITAIS E ARQUITETURA DE COMPUTADORES Módulo 1 – Sistemas de Numeração
2014-2015-2016 -22- V01beta