Sistemas de Numeração Importantes na Computação

Propaganda
Capítulo
DOIS
Sistemas de numeração em computação
2 . 1 Introdução
Em todas as fórmulas usadas a seguir, ‘B’ representa a base do sistema de numeração, ‘n’
representa a quantidade de dígitos disponíveis para representar os números, e ‘a’, ‘b’ e ‘c’
representam números. A fórmula utilizada para representar um número inteiro:
n-1
Σ (xi.B i)
a=
i=0
será representada por a=Σ n-1xiBi, ficando a variação de i desde 0 até o limite (n-1) implícita.
Para uma determinada base B, empregando-se n dígitos, pode-se representar Bn combinações distintas, ou seja, Bn números distintos. Assim, para base decimal com três dígitos
pode-se representar 1000 números distintos (com zero incluído!). Entretanto, com os
mesmos três dígitos e base dois, representa-se somente 8 números distintos. Assim,
números binários vão exigir um grande número de dígitos, e normalmente trabalha-se com
grandes cadeias de zeros e uns. Isto pode levar a erros visuais, e por isso empregam-se
comumente as notações em base 8 e base 16 para representar números binários.
A tabela abaixo lista os primeiros 16 números em binário, decimal, octal e hexadecimal.
Binário
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
Decimal
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Octal
00
01
02
03
04
05
06
07
10
11
12
13
14
15
16
17
Hexadecimal
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
Tabela 2.1 - Números em binário, decimal, octal e hexadecimal
Em computação trabalha-se normalmente com quatro bases: a decimal, para entrada e saída
dos dados (já que nossa sociedade é baseada no sistema decimal); a binária, para os cálculos
internos; a hexadecimal, como forma compactada de representação interna; e a octal, também
por este motivo. Note-se que a escolha das bases 8 e 16 não é ocasional: as transformações
2-1
entres as bases 2, 8 e 16 pode ser feita facilmente pelo método da substituição direta. Embora
a base hexadecimal seja de representação mais complexa (utiliza letras e dígitos), ela é
preferida sobre a base octal por ser mais compacta, ou seja, requerer menos espaço para
representar os resultados.
Os números do sistema binário são formados como qualquer outro número do sistema de
numeração arábico (inclusive em octal ou hexadecimal): cada novo número é obtido por
enumeração, somando-se um ao seu antecessor (e observando-se a regra do “vai-um”).
Cada dígito do sistema binário (0 e 1) é denominado de bit, a contração de binary digit. A
determinados conjuntos de bits são empregados nomes específicos. Assim, um quarteto (4
bits) é frequentemente denominado de nibble, e um octeto (8 bits) recebe a denominação de
byte (ou o termo aportuguesado baite). Os múltiplos deste conjuntos utilizam os mesmos
denominadores que no sistema decimal (K para kilo, M para Mega, G para giga, T para
3
10
Tera, P para Peta), mas o fator multiplicativo não é 1000 (10 ) mas sim 1024 (2 ). Assim,
um kilobit (abreviado 1Kb) são 1024 bits, e um kilobyte (abreviado 1KB) são 1024 bytes.
Um megabyte (1MB) são 1024 KB; um gigabyte (1GB) são 1024 MB, um terabyte (1TB)
são 1024 GB e assim por diante.
2 . 2 Soma de números binários
A soma de dois números binários utiliza as mesmas regras da soma no sistema decimal.
Como existem entretanto somente dois símbolos, a tabela de soma é extremamente simples:
a
0
0
1
1
c
0
1
0
1
d=a+c
0
1
1
0 e “vai-um”
Tabela 2.2 - Tabela verdade de um meio-somador (half adder)
Observe-se que soma de 1 mais 1 resulta em 10 (dois), ou seja, o dígito do resultado é zero e
existe a ocorrência de um “vai-um” (carry out, em inglês). Considerando-se a possível
existência de um “vem-um” (carry in) e de “vai-um” (carry out), obtém-se a tabela a seguir.
a
0
0
0
0
1
1
1
1
c
0
0
1
1
0
0
1
1
vem-um
0
1
0
1
0
1
0
1
d=a+c
0
1
1
0
1
0
0
1
vai-um
0
0
0
1
0
1
1
1
Tabela 2.3 - Tabela verdade de um somador completo (full adder)
2 . 3 Representação de números
A representação de números inteiros positivos é direta e imediata. Entretanto, é necessário
expandir (ou modificar) esta representação para incluir também números negativos. Diversas
representações foram desenvolvidas com este propósito. Quatro destas representações, as
mais comuns atualmente, são analisadas a seguir: inteiros positivos, sinal/magnitude,
complemento de B-1 e complemento de B.
2-2
2 . 3 . 1 Números inteiros positivos
Considerando-se somente a representação de números inteiros positivos, com n dígitos
pode-se representar Bn números, dispostos no intervalo fechado entre zero (o menor) e Bn–1
(o maior).
Faixa de representação: [ 0 , Bn–1 ]
Assim, para 2 dígitos decimais tem-se 100 números, de 0 a 99; para 3 dígitos em base 3 temse 27 números, de 0 (0003) a 26 (222 3); para 4 dígitos binários tem-se 24=16 números,
desde zero (00002) até 15 (11112); para 8 dígitos binários tem-se 28=256 números, desde
zero (000000002) até 255 (111111112); Não existe previsão para números negativos.
Cálculo do valor do número
O valor de número positivo é calculado pelo polinômio Σ n-1xiBi, exatamente o mesmo
método utilizado para a conversão pelo método polinomial.
Troca de sinal
Como não existe a capacidade de representar números negativos, não existe tal função.
Soma de dois números
A soma de dois números positivos é realizada somando-se os dois polinômios dígito a
dígito, de acordo com as tabelas da soma na base em questão. Para base 2 utiliza-se a Tabela
2.3 da seção 2.2. Naturalmente, nesta soma leva-se em conta os eventuais “vai-um” e “vemum”.
2 . 3 . 2 Números com sinal: representação em sinal-magnitude
Para permitir números com sinal, esta representação utiliza um dígito (normalmente o mais
significativo) para representar o sinal. No sistema decimal, o símbolo ‘–’ é usado para
indicar números negativos e ‘+’ (ou simplesmente um espaço vazio) para números positivos.
Com isto ganha-se a possibilidade de representar inteiros negativos, mas a faixa de
representação é reduzida porque tem-se agora somente (n–1) dígitos para representar a
magnitude.
Faixa de representação: [ –(Bn-1–1) , +(Bn-1–1) ] ou [ –(Bn-1–1) , (Bn-1–1) ]
Divide-se a gama de representação em dois subconjuntos simétricos, um para números
negativos e outro para positivos. A faixa dos números positivos é reduzida de um fator igual
a base B. Por exemplo, para base decimal com dois dígitos, se consideramos somente
números positivos tem-se a faixa de 0 até 99; com a representação em sinal magnitude
obtém-se a faixa de –9 até +9. Além disto, existem duas representações para o zero: –0 e +0.
De um modo geral, para uma base qualquer, das Bn combinações possíveis usam-se somente
2.B n-1–1 (descontando-se o duplo zero). No exemplo acima, das 100 combinações são
utilizadas somente 19.
Em binário, entretanto, com B=2, obtém-se 2.2n-1–1, ou seja, 2n–1 (isto é, Bn–1). Assim,
somente uma representação é perdida (a do duplo zero). Obs.: no sistema binário costuma-se
utilizar ‘1’ no lugar de ‘–’, e ‘0’ no lugar de ‘+’. Assim, para 4 dígitos, 0111 representa 7,
1111 representa –7, 0000 representa zero e 1000 representa –0.
2-3
Cálculo do valor do número
Um número em sinal magnitude, independente de qual a base utilizada, é formado por duas
parcelas, escritas lado a lado. A parcela à esquerda (S(a)) representa o sinal e a parcela à
direita (M(a)) a magnitude:
a = S(a)M(a)
onde S(a) é ‘+’ ou ‘–’, e M(a)=Σ n-2xiBi. Em binário, utiliza-se usualmente ‘0’ no lugar de
‘+’ e ‘1’ ao invés de ‘-’.
Troca de sinal
Para trocar o sinal de um número ‘a’ em sinal magnitude, troca-se simplesmente S(a),
mantendo-se a magnitude M(a). Assim, no caso de c=–a, tem-se M(c)=M(a), e se S(a)=‘+’,
então S(c)=‘–’, e se S(a)=‘–’ então S(c)=‘+’.
Soma de dois números
A soma de dois números em sinal magnitude é realizada de acordo com as regras da tabela
abaixo. No caso, deseja-se calcular d=a+c.
S(a)
+
–
+
S(c)
+
–
–
–
+
S(d)
+
–
se M(a)≥M(c), +
se M(a)<M(c), –
se M(a)>M(c), –
se M(a)≤M(c), +
M(d)
M(a)+M(c)
M(a)+M(c)
M(a)–M(c)
M(c)–M(a)
M(a)–M(c)
M(c)–M(a)
Exemplo
5 + 7 = 12
-5 + -7 = -12
7 + -5 = 2
5 + -7 = -2
-7 + 5 = -2
-5 + 7 = 2
Tabela 2.4 - Soma em sinal / magnitude
Note-se que, para realizar somas de números em sinal/magnitude, deve-se conhecer as
tabelas de soma e de subtração da base em que se estiver trabalhando. Esta necessidade de
realizar duas operações distintas (soma e subtração) torna muito mais complexa a
manipulação de números em sinal/magnitude pelo computador. Assim, apesar de familiar ao
ser humano, esta notação é pouco utilizada em computação.
Para resolver o problema de representação de números negativos, optou-se por usar a
notação em complemento da base, como visto a seguir. Duas notações foram desenvolvidas:
em complemento de (B-1) e em complemento de B Observação: a tabela de subtração em
binário será vista mais adiante (seção 2.5).
2 . 3 . 3 Números com sinal: representação em complemento de (B–1)
Para permitir que a operação de soma seja realizada de forma única, sem preocupação com os
sinais dos operandos, é utilizada a representação em complemento. Números positivos são
representados na forma normal, e números negativos são representados em complemento.
Na representação em complemento de (B-1), o complemento de um número a é obtido
subtraindo-se este número da maior quantidade representável, ou seja, Bn–1–a. Assim, na
base 10, com 3 dígitos, o complemento de 9 (10-1) de um número a é obtido pela fórmula
999-a. Note-se que isto equivale a subtrair cada um dos dígitos de a de 9, que é justamente a
base 10 menos um. Generalizando, para representar números negativos em complemento de
B–1, cada algarismo xi é complementado individualmente pela fórmula B–1–xi. A tabela a
seguir ilustra o cálculo do complemento para diversas bases.
2-4
Algarismo
0
1
2
3
4
5
6
7
8
9
B=2
1
0
-
B=3
2
1
0
-
B=4
3
2
1
0
-
B=8
7
6
5
4
3
2
1
0
-
B=9
8
7
6
5
4
3
2
1
0
-
B=10
9
8
7
6
5
4
3
2
1
0
Tabela 2.5 - Exemplos de cálculo de complemento de B-1
A notação em complemento elimina a necessidade de representação explícita do símbolo do
sinal, ou seja, não existe um símbolo especial para o sinal. A faixa de números
representáveis é dividida em duas. Uma das faixas representa números positivos, e a outra
faixa representa números negativos. Existindo m representações, as primeiras m/2 são
utilizadas para números positivos (de 0 a m/2), e as m/2 representações seguintes (de m/2 até
m) são utilizadas para números negativos. A faixa de representação fica:
Faixa de representação, para B par:
[ –(Bn/2–1) , +(B n/2–1) ]
Faixa de representação, para B ímpar:
[ –(Bn–3)/2 , +(B n–1)/2 ]
A tabela a seguir ilustra as faixas para diversas bases. Note-se que a gama de representação é
dividida em dois subconjuntos, um para números negativos e outro para positivos. A faixa
dos números positivos é reduzida da metade (em relação aos inteiros positivos). Continua
existindo a dupla representação do zero, assim como em sinal magnitude, mas não existe
mais a perda de capacidade de representação devido a existência do dígito de sinal.
Base Num.dig.
Faixa
Faixa em decimal
2
4
1000,1001,..,1111,0000,0001,..,0111
–7,–6,..,–0,+0,1,..7
3
3
112,120,121,..,222,000,001,..,111 –12,–11,–10,..,–0,+0,1,..,13
4
3
200,201,..,333,000,001,..,132,133
–31,–30,..,–0,+0,1,..31
8
3
400,401,..,777,000,001,..,376,377
–255,–254,..,–0,+0,..,255
9
2
45,46,..,88,00,01,..,43,44
–39,–38,..,–0,+0,1,..,39,40
10
2
50,51,..,98,99,00,01,..,48,49
–49,–48,..,–1,–0,+0,..,48,49
Tabela 2.6 - Exemplos de faixas de representação em complemento de B-1
Por exemplo, para base decimal com dois dígitos, se consideramos somente números positivos tem-se a faixa de 0 até 99; com a representação em complemento de 9 obtém-se a faixa
de 50 a 99 e 0 a 49. A primeira metade (de 50 a 99) representa números negativos (de –49 a
–0); a segunda metade (de 0 a 49) representa números positivos. Note-se que um número
iniciando por 9, 8, 7, 6 ou 5 é negativo; iniciando por 0, 1, 2, 3 ou 4 é positivo. Em binário,
para 4 dígitos, tem-se a faixa 1000 a 1111 (–7 a –0) e 0000 a 0111 (0 a 7). Números
iniciando por 1 são negativos, e iniciando por 0 são positivos.
Para bases ímpares, existe um número positivo a mais, e para a determinação do sinal não
basta a verificação do dígito mais significativo (veja-se a seguir). Por exemplo, na tabela 2.6,
os números em base 3 iniciando por zero são positivos, e os números iniciando por 2 são
negativos, mas dos números iniciando por 1 metade são positivos (100, 101, 102, 110 e
111) e metade são negativos (112, 120, 121 e 122).
2-5
Cálculo do valor do número
Um número em complemento de (B–1) tem o seu valor calculado de acordo com os
seguintes passos:
• determinação do sinal: se a representação do número, interpretado como inteiro
positivo, estiver na metade superior da faixa, ele é negativo. Se estiver na metade
inferior da faixa, é positivo. Ou seja, sendo o número a=Σ n-1xiBi, se a≥ B n/2, então
este número em complemento de (B–1) é negativo. Se a<Bn/2, então, em complemento
de (B–1), ele é positivo. Obs.: para bases pares, basta analisar o dígito mais
significativo, conforme já explicado.
Assim, por exemplo, para base 3 com três dígitos, tem-se 33 = 27 representações. A
metade é 13,5, e assim os números de 0 a treze (representados respectivamente por
000 a 111) são positivos, e os de 14 a 26 (representados por 112 a 222) são negativos.
Note-se que existem 14 números positivos, e 13 números negativos.
Em outro exemplo, para base 4 com três dígitos, tem-se 43 = 64 combinações. A
metade é 32, e então os números de 0 a 31 (representados por 000 a 133) são
positivos, e os de 32 a 63 (representados por 200 a 333) são negativos. Existem neste
caso 32 números positivos e 32 números negativos.
• determinação da magnitude do número. Se o número a for positivo, então sua
magnitude é dada por M(a)=Σ n-1xiBi. Se o número a for negativo, para calcular sua
magnitude (valor absoluto) deve-se calcular o complemento de (B–1) de cada
algarismo, ou seja, substitui-se cada dígito pelo seu complemento. Alternativamente,
também é possível manipular todo o número:
M(a)=Σ n-1(B-1-xi)Bi = Σ n-1(B-1)Bi – Σ n-1xiBi = Bn–1–Σ n-1xiBi =Bn–1–a
Assim, por exemplo, para base 3 com três dígitos, a magnitude de 110 é 12 (o número
é positivo). Já o número 112 é negativo, e assim seus dígitos devem ser
complementados, resultando em 110, ou seja, a magnitude também é 12. Utilizando-se
a fórmula acima, tem-se também 33–1–(112)3 = 27–1–14=26–14=12.
A tabela a seguir fornece diversos exemplos do cálculo do valor de um número, de acordo
com as regras descritas acima.
Base
2
2
2
2
3
3
3
10
10
10
10
10
10
Num.dig.
4
4
4
4
3
3
3
2
2
3
3
3
3
Número
1110
1001
1010
0101
102
111
121
98
99
45
54
76
50
Sinal
–
–
–
+
+
+
–
–
–
+
–
-
Magnitude
1
6
5
5
11
13
10
1
0
45
45
23
49
Num.decim.
–1
–6
–5
+5
+11
+13
–10
–1
–0
+45
–45
-23
-49
Tabela 2.7 - Exemplos de cálculo do valor de um número em complemento de B-1
2-6
Troca de sinal
Para trocar o sinal de um número a em complemento de (B–1), basta complementar, também
em B–1, cada um de seus dígitos. Assim, no caso de c=–(a), tem-se, pelo raciocínio acima,
c=Bn–1–a. Note-se que –(–(a)) = –(Bn–1–a) = Bn–1–(Bn–1–a) = a.
No caso de bases ímpares, o maior positivo, ao ser trocado de sinal, resulta novamente em si
próprio. Nestes casos, diz-se que houve estouro de representação (veja seção 2.6). Para
bases pares, isto nunca ocorre (para complemento de B-1). A tabela abaixo ilustra diversos
casos de troca de sinal.
Base
2
2
2
2
3
3
3
10
10
10
10
16
16
16
Num.dig.
4
4
4
4
3
3
3
2
2
2
2
2
2
2
Número
1110
1001
1010
0101
102
111
121
98
99
45
54
01
FF
98
Núm.negado
0001
0110
0101
1010
120
111 (estouro)
101
01
00
54
45
FE
00
67
Magnitude
1
6
5
5
11
13
10
1
0
45
45
1
0
103
Tabela 2.8 - Exemplos de troca de sinal para números em complemento de B-1
Soma de dois números
Para entender-se o processo de soma de dois números em complemento de (B–1), deve-se
analisar os mesmos casos da soma em sinal magnitude. Na Tabela 2.9 a seguir, deseja-se
realizar a soma d=a+c. Os números a e c estão em complemento de (B–1), e quer-se obter d
também em complemento de (B–1). Note-se que um número x, quando for negativo, está
representado por Bn-1-M(x). As quatro primeiras colunas da esquerda da tabela mostram os
mesmos seis casos da soma em sinal/magnitude, e a coluna da direita ilustra o resultado
obtido pela simples soma dos dois operandos, sem analisar-se seus sinais, suas magnitudes
ou se eles devem na realidade ser somados ou subtraídos (ou seja, simplesmente realiza-se a
soma a+c).
Em todos os casos mostrados na Tabela 2.9, usam-se sempre as mesmas tabelas de soma de
números inteiros (não se utilizam tabelas especiais para soma ou subtração em complemento
de (B–1)). Note-se que em três casos, marcados com (*), não se obtém diretamente o
número já representado em complemento de (B–1); existe um termo excedente de Bn–1. Nos
outros três casos, não marcados, o resultado obtido já está correto.
Para reconhecer facilmente os casos que necessitam de correção, basta observar-se que o
termo Bn corresponde a um dígito na posição (n+1). Como os números representados tem
somente n posições, a posição (n+1) só será ocupada naquelas somas que produzirem um
“vai-um”. Assim, se o termo Bn estiver presente, ele só pode ter sido gerado, na soma, por
um “vai-um”. Ou seja, somente os casos que produzirem um “vai-um” são os que
necessitam de correção. Para eliminar o termo Bn, basta eliminar-se este “vai-um”. E para
eliminar o termo (–1), adiciona-se um ao resultado.
2-7
S(a)
S(c)
S(d)
M(d)
+
–
+
–
+
–
M(a)+M(c)
M(a)+M(c)
+
–
se M(a)≥M(c), + M(a)–M(c)
se M(a)<M(c), – M(c)–M(a)
–
+
se M(a)>M(c), – M(a)–M(c)
se M(a)≤M(c), + M(c)–M(a)
Resultado obtido pela
simples soma de a+c
a+c
Bn-1-M(a) + Bn-1-M(c)
Bn-1+Bn-1-(M(a)+M(c))
Bn-1 + Bn-1 - M(d)
Bn-1 + d (*)
M(a) + Bn-1-M(c)
Bn-1 + M(a)-M(c)
Bn-1 + d (*)
M(a) + Bn-1-M(c)
Bn-1 - (M(c)-M(a))
Bn - 1 - M(d)
d
Bn-1 - M(a) + M(c)
Bn-1 - (M(a)-M(c))
Bn-1 - M(d)
d
Bn-1 - M(a) + M(c)
Bn-1 + (M(c)-M(a))
Bn-1 + d (*)
Tabela 2.9 - Soma em complemento de B-1
Simplificando, tem-se a seguinte regra de correção: para obter a soma correta em
complemento de (B–1), basta somar o “vai-um” ao resultado (e eliminar o “vai-um”). Ou,
dito de outra maneira, se ocorrer um “vai-um”, deve-se somar um ao resultado para corrigilo. Se não ocorrer “vai-um”, o resultado já está correto. A tabela a seguir ilustra exemplos de
diversas somas, tanto em base 2 (complemento de um) como em base 10 (complemento de
nove).
Base
2
2
2
2
2
2
2
2
10
10
10
10
10
10
Num.dig.
4
4
4
4
4
4
4
4
2
2
2
2
2
2
a
1110
1111
1001
0110
0101
0011
1111
0001
98
99
99
45
45
76
c
0001
0001
0111
1111
1000
0011
1111
1110
37
00
01
55
45
45
d=a+c
1111
10000
10000
10101
1101
0110
11110
1111
135
99
100
100
90
121
Tabela 2.10 - Exemplos de soma em complemento de B-1
2-8
d corrigido
1111
0001
0001
0110
1101
0110
1111
1111
36
99
01
01
90
22
2 . 3 . 4 Números com sinal: representação em complemento de B
Para representar números em complemento de B, utiliza-se a fórmula Bn–a. Note-se que, ao
contrário de complemento de (B–1), esta fórmula é aplicada sobre todo o número, e não
sobre os seus algarismos individuais. Desta maneira elimina-se a dupla representação do
zero, e faixa de representação fica:
Faixa de representação, para B par:
[ –(Bn/2) , +(B n/2–1) ]
Faixa de representação, para B ímpar:
[ –(Bn–1)/2 , +(B n–1)/2 ]
Note-se que a gama de representação é dividida em dois subconjuntos, um para números
negativos e outro para positivos. Não existe mais a dupla representação do zero. Observe-se
também que as faixas (considerando-se a representação dos números) continuam as mesmas
da representação em complemento de B–1. Como estes números são agora interpretados em
complemento de B, entretanto, os valores das faixas mudam. A faixa positiva permanece a
mesma, mas a faixa negativa sofre um deslocamento de uma unidade, de forma a eliminar o
zero negativo. A tabela a seguir ilustra as faixas para diversas bases.
Base Num.dig.
Faixa
Faixa em decimal
2
4
1000,1001,..,1111,0000,..,0111
–8,–7,..,–1,0,1,..7
3
3
112,120,121,..,222,000,001,..,111 –13,–12,–11,..,–1,0,1,..,13
4
3
200,201,..,333,000,001,..,132,133
–32,–31,..,–1,0,1,..31
8
3
400,401,..,777,000,001,..,376,377
–256,–255,..,–1,0,1,..,255
9
2
45,46,..,88,00,01,..,43,44
–40,–39,..,–1,0,1,..,39,40
10
2
50,51,..,98,99,00,01,..,48,49
–50,–49,..,–2,–1,0,1,..,48,49
Tabela 2.11 - Exemplos de faixas de representação em complemento de B
Na Tabela 2.11, por exemplo, para base decimal com dois dígitos, com números positivos
tem-se a faixa de 0 até 99; com a representação em complemento de 9 obtém-se a faixa de 50
a 99 e 0 a 49. Esta faixa continua a mesma para complemento de 10; e da mesma maneira a
primeira metade (de 50 a 99) representa números negativos; a segunda metade (de 0 a 49)
representa números positivos. Entretanto, agora 99 representa –1 (e não mais zero, como em
complemento de 9) e 50 representa o número –50 (que não tem representação positiva
equivalente!). Ou seja, todos os números negativos sofreram um acréscimo de –1. As
demais propriedades se mantém: um número iniciando por 9, 8, 7, 6 ou 5 é negativo;
iniciando por 0, 1, 2, 3 ou 4 é positivo. Em binário, para 4 dígitos, tem-se a faixa 1000 a
1111 (–8 a –1) e 0000 a 0111 (0 a 7). Números iniciando por 1 são negativos, e iniciando
por 0 são positivos.
Note-se também que agora as bases ímpares tem faixas simétricas, mas que as bases pares
possuem um número negativo a mais, que não tem equivalente positivo dentro da faixa.
Cálculo do valor do número
Um número em complemento de B, tem o seu valor calculado de acordo com os seguintes
passos:
• determinação do sinal: a regra é a mesma de complemento de (B–1): se a
representação do número, interpretado como inteiro positivo, estiver na metade
superior da faixa, ele é negativo. Se estiver na metade inferior da faixa, é positivo. Ou
seja, sendo o número a=Σ n-1xiBi, se a≥ Bn/2, então este número em complemento de
B é negativo. Se a<Bn/2, então sua interpretação é de um número positivo. Obs.: para
bases pares, a regra pode ser simplificada: basta analisar o dígito mais significativo,
conforme já foi explicado.
2-9
• determinação da magnitude do número. Se o número a for positivo, então sua
magnitude é dada por M(a)=Σ n-1xiBi. Se o número a for negativo, para obter seu valor
deve-se calcular o complemento de B do número:
M(a)=Bn–a = Bn – Σ n-1xiBi
Note-se que Bn-1-a é a representação em complemento de (B–1). Assim, uma maneira rápida
de calcular o complemento de B é realizando o complemento de (B–1) de cada algarismo e a
seguir somar um no número resultante. Ou seja, (Bn–1–a)+1 = Bn–a, que é o número
desejado em complemento de B. A tabela a seguir fornece diversos exemplos.
Base
2
2
2
2
2
2
3
3
3
3
10
10
10
10
10
Num.dig.
4
4
4
4
4
4
3
3
3
3
2
2
3
3
3
Número
1110
1001
1010
1000
0101
0111
102
111
112
121
98
99
45
54
50
Sinal
–
–
–
–
+
+
+
+
–
–
–
–
+
–
–
Magnitude
2
7
6
8
5
7
11
13
13
11
2
1
45
46
50
Num.decim.
–2
–7
–6
–8
+5
+7
+11
+13
–13
–11
–2
–1
+45
–46
–50
Tabela 2.12 - Exemplos de cálculo do valor de um número em complemento de B
Troca de sinal
Para trocar o sinal de um número a em complemento de B, basta calcular Bn-a. Ou, pelo
raciocínio acima, calcula-se o complemento de (B–1), complementando cada algarismo, e
depois soma-se um. A tabela a seguir ilustra diversos casos de troca de sinal. Note-se que,
para bases pares, a troca de sinal do menor número negativo (de maior magnitude) provoca
estouro de representação, pois este número não tem equivalente positivo. Em bases ímpares
isto não ocorre.
Base
2
2
2
2
2
3
3
3
10
10
10
10
10
Num.dig.
4
4
4
4
4
3
3
3
2
2
3
3
3
Número
1110
1001
1010
0101
1000
102
111
121
98
99
45
54
50
Núm.negado Magnitude
0010
2
0111
7
0110
6
1011
5
1000 (estouro)
8 (–8)
121
11
112
13
102
10
02
2
01
1
55
45
46
46
50 (estouro)
50 (–50)
Tabela 2.13 - Exemplos de troca de sinal para números em complemento de B
2-10
Soma de dois números
O raciocínio é análogo ao utilizado em complemento de (B–1). Deve-se analisar os mesmos
casos da soma em complemento de (B–1) e da soma em sinal magnitude. Na tabela a seguir,
deseja-se calcular d=a+c. Os números a e c estão representados em complemento de B, e
quer-se obter d também em complemento de B.
A tabela é praticamente uma cópia da usada para complemento de (B–1); comparando-se as
duas nota-se que a diferença está na eliminação de todos os termos “–1” (que é justamente a
diferença entre (B–1) e (B). Como no caso de complemento de B-1, tem-se seis casos a
serem analisados. A coluna da direita mostra o resultado obtido se for realizada simplesmente
uma soma dos dois operandos, sem a preocupação de analisar previamente os operandos.
Em todos os casos, usam-se sempre as mesmas tabelas de soma de números inteiros (não se
utilizam tabelas especiais para complemento de B). Note-se que em três casos, marcados
com (*), não se obtém diretamente o número já representado em complemento de B; existe
um termo excedente de Bn. Nos outros três casos, não marcados, o resultado obtido já está
correto.
S(a)
+
–
S(c)
+
–
S(d)
+
–
M(d)
M(a)+M(c)
M(a)+M(c)
+
–
se M(a)≥M(c), + M(a)–M(c)
se M(a)<M(c), – M(c)–M(a)
–
+
se M(a)>M(c), – M(a)–M(c)
se M(a)≤M(c), + M(c)–M(a)
d (Soma de a + c)
a+c
Bn-M(a) + Bn-M(c)
Bn+Bn - (M(a)+M(c))
Bn + Bn - M(d)
Bn + d (*)
M(a) + Bn-M(c)
Bn + M(a)-M(c)
Bn + d (*)
M(a) + Bn-M(c)
Bn - (M(c)-M(a))
Bn - M(d)
d
Bn - M(a) + M(c)
Bn - (M(a)-M(c))
Bn - M(d)
d
Bn - M(a) + M(c)
Bn + (M(c)-M(a))
Bn + d (*)
Tabela 2.14 - Soma em complemento de B
Os casos a serem corrigidos são identificados da mesma maneira que em complemento de
(B–1). Somente os casos que produzirem um “vai-um” são os que necessitam de correção.
Para eliminar o termo B n, basta eliminar este “vai-um”; não existe a necessidade de somar
um ao resultado. Para todos os fins práticos, esta “eliminação” é realizada simplesmente
ignorando-se a existência do “vai-um” em um primeiro momento (a ocorrência ou não do
“vai-um” ainda pode influenciar a análise do resultado da soma, mas não a soma
propriamente dita).
A tabela a seguir ilustra exemplos de diversas somas, tanto em base 2 como em base 10,
considerando que os números estão representados em complemento de B.
2-11
Base
2
2
2
2
2
2
2
2
10
10
10
10
10
10
Num.dig.
4
4
4
4
4
4
4
4
2
2
2
2
2
2
a
1110
1001
1111
0110
0101
0011
1111
0001
98
99
99
45
45
76
c
0001
0111
0001
1111
1000
0011
1111
1110
37
00
01
55
45
45
d=a+c
1111
10000
10000
10101
1101
0110
11110
1111
135
99
100
100
90
121
d corrigido
1111
0000
0000
0101
1101
0110
1110
1111
35
99
00
00
90
21
Tabela 2.15 - Exemplos de soma em complemento de B
2 . 4 Comparação entre os métodos
Dos quatro métodos estudados nas seções anteriores, dois são amplamente utilizados: o de
representação de números positivos e o de representação em complemento de B. Nestas duas
representações, somas são realizadas através das mesmas tabelas; nenhum procedimento
especial é necessário para somar-se dois números em complemento de dois (exceto a
eventual eliminação do “vai-um”). Os outros dois métodos, de sinal magnitude e de
complemento de (B–1), sofrem da desvantagem de necessitarem de procedimentos mais
complexos para realização da soma, além de apresentarem duas representações para o zero.
Em sistemas atuais, a base é binária e utiliza-se para tratamento de números negativos a
representação em complemento de 2.
A título de comparação, a tabela a seguir mostra a interpretação decimal de números binários
de 4 dígitos nas quatro maneiras analisadas.
Binário
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
Int.positivo
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
sinal mag.
+0
1
2
3
4
5
6
7
–0
–1
–2
–3
–4
–5
–6
–7
compl. de 1
0
1
2
3
4
5
6
7
–7
–6
–5
–4
–3
–2
–1
–0
compl. de 2
0
1
2
3
4
5
6
7
–8
–7
–6
–5
–4
–3
–2
–1
Tabela 2.16 - Interpretação de números binários
2-12
2 . 5 Subtração
A operação de subtração, seja qual for o método de representação utilizado, pode ser
facilmente realizada transformando-a em uma soma:
d = a – c = a + (–c)
Assim, para realizar subtrações, pode-se simplesmente trocar o sinal do subtraendo e somálo ao minuendo. A troca de sinal e a soma seriam então realizadas de acordo com o sistema
de representação utilizado.
A subtração pode, também ser realizada através de tabelas próprias. Neste caso, no lugar de
“vem-um” (carry in), tem-se o “emprestou-um”(borrow in); e no lugar de “vai um” (carry
out) tem-se o “pede-um” (borrow out).
a
0
0
1
1
c
0
1
0
1
d=a-c
0
1 e “pede-um”
1
0
Tabela 2.17 - Tabela verdade de um meio-subtrator
a
0
0
0
0
1
1
1
1
c
0
0
1
1
0
0
1
1
emprestou um
0
1
0
1
0
1
0
1
d=a–c
0
1
1
0
1
0
0
1
pede um
0
1
1
1
0
0
0
1
Tabela 2.18 - Tabela verdade de um subtrator completo
Apesar destas tabelas serem análogas às utilizadas para a soma, a grande maioria dos
computadores não as utiliza; subtrações são realizadas internamente usando-se o método do
complemento do subtraendo.
2 . 6 Estouro de representação
Os números representados em um computador são limitados. Quanto maior o número de
dígitos disponíveis, maior será a faixa dos números representáveis, mas esta faixa sempre
será finita. Assim, ao realizar-se a soma (ou subtração) de dois números, o resultado pode
cair fora da faixa representável. Nestes casos, diz-se que houve estouro ou transbordamento
da representação (overflow). Para representar corretamente o resultado quando ocorreu
estouro necessitaria-se de um dígito a mais para representar o número.
Por exemplo, para números binários de 4 dígitos, tem-se:
1000 + 0001 = 1001
1000 + 1111 = 0111
0111 + 1111 = 0110
0111 + 0011 = 1010
–8 + 1 = –7
–8 + –1 = 7
7 + –1 = 6
7 + 3 = –6
(correto)
(incorreto; deveria ser –9)
(correto)
(incorreto; deveria ser 10)
Note-se que o estouro não está diretamente relacionado com o “vai-um”. Os exemplos acima
ilustram isto. No primeiro caso, não ocorreu nem estouro nem “vai-um”; no segundo caso
2-13
ocorreram tanto estouro como “vai-um”; no terceiro caso ocorreu “vai-um”, mas não estouro;
e no quarto caso não ocorreu “vai-um”, mas ocorreu estouro.
Existe uma regra simples para determinação de estouro em complemento de 2: ocorre estouro
quando o “vai-um” do dígito mais significativo é diferente do “vem-um” para este mesmo
dígito. Note-se que o dígito mais significativo é o utilizado para indicar o sinal do número.
Esta é a maneira como os computadores internamente calculam se o resultado “estourou” ou
não.
Uma outra maneira, que não necessita da análise dos “vai-um” e “vem-um”, utiliza somente
os dígitos mais significativos dos dois operandos e do resultado, ou seja, analisam-se os
sinais dos operandos e do resultado. Esta análise está resumida na tabela a seguir (seja
d=a+c).
Sinal de a Sinal de c
+
+
+
+
–
–
–
–
+
–
–
+
Sinal obtido para d
+
–
–
+
+/–
–/+
Sinal real de d
+
+
–
–
+/–
–/+
Estouro
Não
Sim
Não
Sim
Nunca ocorre
Nunca ocorre
Tabela 2.19 - Análise dos casos de estouro de representação
Pela tabela, pode-se observar que:
• se os dois operandos tiverem sinais diferentes, nunca ocorre estouro (a representação
do resultado sempre estará dentro da faixa).
• somente ocorre estouro quando os dois operandos tiverem sinais iguais, e este sinal é
diferente do sinal obtido para o resultado. Ou seja, quando somando-se dois números
positivos obtém-se um resultado negativo, e quando somando-se dois números
negativos obtém-se um número positivo. Nestas duas situações, o sinal do resultado
está obviamente incorreto, e esta é uma indicação clara que ocorreu estouro de
representação.
Assim, em uma soma, ocorre estouro quando S(a)=S(c) e S(a)≠S(d). Analogamente, em
uma subtração ocorre estouro quando S(a)≠S(c) e S(a)≠S(d).
2 . 7 Exercícios propostos
1. Qual o valor decimal de 011011012? Qual a representação binária de 654?
2. Converter para binário os seguintes números decimais:
(a) 39
(b) 0,4475
(c) 256,75
(d) 129,5625
3. Converter para decimal os seguintes números binários:
(a) 01101
(b) 0,001101
(c) 0111011,1011
(d) 010110011
4. Quantos números diferentes podem ser representados em uma palavra binária de 6 bits?
5. Quantos números diferentes podem ser representados em um conjunto de 4 chaves, cada
uma com três posições diferentes?
6. Escrever os 12 primeiros números no sistema de numeração de base 5.
2-14
7. Escrever os 26 primeiros números no sistema de numeração de base 12. Usar a letra A
para o decimal 10 e a letra B para o decimal 11.
8. Representar o número 12,1 em binário de dez bits, com 5 bits de parte inteira e 5 bits de
parte fracionária.
9. Represente o número –4710 usando representações binárias de 8 bits em (a) sinal e
magnitude, (b) complemento de um e (c) complemento de dois.
10. Converter os seguintes números hexadecimais em decimais:
(a) B6C7
(b) D2763
(c) 9,1A
11. Converter os seguintes números octais em binário:
(a) 56
(b) 32,234
(c) 231,2
(d) 3364
12. Converter os seguintes números hexadecimais em binários:
(a) AB2
(b) 12,A
(c) 649
(d) 0,D19
13. Converter os seguintes números binários em hexadecimais:
(a) 010110111
(b) 011110,01011
(c) 01110100010101
14. Considerando um processador que opere com a base quaternária utilizando 5 bits.
14.1 Para números inteiros positivos:
a) Quantos números diferentes podem ser representados? (Fórmula de cálculo e valor
decimal)
b) Quais são os limites inferior e superior desta faixa? (Valor quaternário e decimal
correspondente)
c) Como seria representado o número 126 neste sistema?
14. 2 Supondo que se queira representar os números inteiros com sinal, usando sinal e
magnitude:
a) Quantos números diferentes podem ser representados? (Fórmula de cálculo e valor
decimal)
b) Quais são os limites inferior e superior desta faixa? (Valor quaternário e decimal
correspondente)
c) Como seria representado o número 126 neste sistema?
d) Como seria representado o número -126 neste sistema?
14.3 Agora supondo que se quer representar estes números usando complemento de B-1:
a) Quantos números diferentes podem ser representados? (Fórmula de cálculo e valor
decimal)
b) Quais são os limites inferior e superior desta faixa? (Valor quaternário e decimal
correspondente)
c) Como seria representado o número 126 neste sistema?
d) Como seria representado o número -126 neste sistema?
14.4 Agora supondo que se quer representar estes números usando complemento de B:
a) Quantos números diferentes podem ser representados? (Fórmula de cálculo e valor
decimal)
b) Quais são os limites inferior e superior desta faixa? (Valor quaternário e decimal
correspondente)
c) Como seria representado o número 126 neste sistema?
d) Como seria representado o número -126 neste sistema?
15. Considere os pares de números binários de 6 bits indicados abaixo. Efetue a operação de
soma entre eles supondo, independentemente, que:
1) os números estão representados em sinal e magnitude;
2) os números estão representados em complemento de um;
2-15
3) os números estão representados em complemento de dois.
Para cada caso, interprete o resultado, isto é, determine qual é o seu valor numérico e indique
se este valor é o resultado correto da operação para a forma de representação sugerida.
(a) 010101 e 110110
(b) 010101 e 010110
(c) 110101 e 110110
16. Efetuar as seguintes subtrações em um sistema decimal de 4 dígitos, utilizando uma vez
complemento de 9 e outra vez complemento de 10:
(a) 1024–913
(b) 249–137
(c) 119–239
17. Repetir o exercício 16, agora para um sistema binário de 12 bits, uma vez utilizando
complemento de um e outra vez com complemento de dois.
18. Efetuar as operações indicadas abaixo (em decimal) em um sistema binário de 10 bits,
com notação em complemento de dois. Analise o resultado, indicando a eventual existência
de estouro de representação:
(a) 475 + 128
(b) - 506 + -6
(c) 436 – 475
(d) 506 + 6
(e) 128 – 128
(f) - 475 + 511
19. Converta os números 17 e 15 para binário usando 6 bits e efetue a operação de soma
entre eles (17+15), usando as seguintes representações:
a) sinal magnitude;
b) complemento de um;
c) complemento de dois.
Analise os resultados obtidos quanto à correção (sem calcular o seu valor correspondente em
decimal).
20. Repita o exercício 19 para os números 13 e 8.
21. Repita o exercício 19 para os números -17 e -15 (realizando a soma -17+(-15)).
22. Mostre como somar em complemento de um, para n=6 bits, as seguintes parcelas
decimais:
(a) 27 e –7
(b) 27 e 8
(c) 1 e 5
23. Repetir o exercício 23, com as parcelas codificadas em complemento de dois, também
para 6 bits.
24. Usando a técnica de subtrair através de complemento do subtraendo, mostrar como obter
as seguintes diferenças em binário, 6 bits, complemento de um:
(a) 8 – 7
(b) -16 – 16
(c) 15 – 24
25. Repetir o exercício 25 para complemento de dois em 6 bits.
26. Repetir o exercício 25 para sinal / magnitude.
27. Converta os seguintes números para binário, usando a representação destinada a inteiros
positivos, usando o número necessário de bits e efetue a subtrações indicadas usando a
tabela de subtração:
(a) 32 - 15
(b) 31 - 14
(c) 17 - 9
28. Supondo um sistema decimal, com 4 dígitos, que trabalhe com representação de
negativos em complemento de 9, mostre como realizar as operações:
(a) 0136 + 7654
(b) 9998 + 7777
(c) 0010 – 0108
29. Repetir o exercício 28 para representação em complemento de 10.
2-16
Download