Arquitetura de Computadores - Aritmética Computacional

Propaganda
UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO
DEPARTAMENTO DE CIÊNCIAS EXATAS E NATURAIS
CURSO DE CIÊNCIA DA COMPUTAÇÃO
Arquitetura e Organização de
Computadores
Aritmética Computacional
Prof. Helcio Wagner da Silva
Representação de Números Inteiros
• No sistema de numeração binária, é possível
representar números inteiros negativos
usando:
– Dígitos 0 e 1
– Sinal de subtração
– Vírgula
• Exemplo:
-1101,01012 = -13,312510
2
Representação de Números Inteiros
• Para armazenar e processar números inteiros
negativos no computador, são usados apenas
os dígitos 0 e 1
• Como representar números negativos?
– Representação Sinal-Magnitude
– Representação em Complemento de Dois
3
Representação Sinal-Magnitude
• Em uma palavra de n bits
– O bit mais à esquerda representa o sinal do
número inteiro
– Os n-1 bits mais à direita representam a
magnitude do número inteiro
• Exemplo:
+18 = 00010010
-18 = 10010010
4
Representação Sinal-Magnitude
• Há duas representações para o zero
+0 = 00000000
-0 = 10000000
• É mais difícil testar se um valor é igual a zero
do que no caso em que há apenas uma
representação para o zero
• Por isso, essa representação raramente é
usada na implementação da parte inteira de
uma ULA
5
Representação em Complemento de Dois
• A = -2n-1an-1 + Σn-2i=02iai
– Para números inteiros positivos, an-1 = 0
– O número 0 é tratado como um número inteiro
positivo
• Usada para representar números na faixa -2n
↔ 2n-1-1
• Usada quase universalmente para representar
números inteiros dentro do µP
6
Representação em Complemento de Dois
Decimal
S-M
C-2
Decimal
S-M
C-2
+8
+7
+6
+5
+4
+3
+2
+1
+0
0111
0110
0101
0100
0011
0010
0001
0000
0111
0110
0101
0100
0011
0010
0001
0000
-0
-1
-2
-3
-4
-5
-6
-7
-8
1000
1001
1010
1011
1100
1101
1110
1111
-
1111
1110
1101
1100
1011
1010
1001
1000
7
Representação em Complemento de Dois
• Conversão complemento de 2 → decimal
-128
64
32
16
8
4
2
1
1
0
0
0
0
0
1
1
+2
+1 = -125
-128
• Conversão decimal→ complemento de 2
-120 =
-128
64
32
16
8
4
2
1
1
0
0
0
1
0
0
0
-128
+8
8
Representação em Complemento de Dois
• Às vezes é desejável converter a
representação de um número inteiro com n
bits para sua representação com m bits, onde
m>n
• Na representação sinal-magnitude, isso pode
ser feito facilmente
– Basta mover o bit de sinal para a posição mais à
esquerda e preencher as demais posições novas
com 0
9
Representação em Complemento de Dois
• Exemplos:
+18 =
00010010 (s-m, 8 bits)
+18 = 0000000000010010 (s-m, 16 bits)
-18 =
10010010 (s-m, 8 bits)
-18 = 1000000000010010 (s-m, 16 bits)
• Esse procedimento não funciona para
números inteiros negativos representados em
complemento de dois
10
Representação em Complemento de Dois
• Exemplos:
+18 =
00010010 (c-2, 8 bits)
+18 = 0000000000010010 (c-2, 16 bits)
-18 =
11101110 (c-2, 8 bits)
-32.658 = 1000000001101110 (c-2, 16 bits)
• A regra é mover o bit de sinal para a posição
mais à esquerda e preencher as demais com
valor igual ao bit de sinal
11
Representação em Complemento de Dois
• Exemplos:
+18 =
00010010 (c-2, 8 bits)
+18 = 0000000000010010 (c-2, 16 bits)
-18 =
11101110 (c-2, 8 bits)
-18 = 1111111111101110 (c-2, 16 bits)
12
Representação em Complemento de Dois
• Negação
– Para representação s-m, basta inverter o valor do
bit de sinal
– Para a representação em complemento de dois:
• Toma-se o complemento booleano de cada bit do
número
• Adiciona-se 1 ao resultado
13
Representação em Complemento de Dois
• Exemplos:
+18 = 00010010 (c-2)
Complemento booleano = 11101101
+1
11101110 = -18
-18 = 11101110 (c-2)
Complemento booleano = 00010001
+1
00010010 = +18
14
Representação em Complemento de Dois
• Casos especiais de negação
0 = 00000000 (c-2)
Complemento booleano = 11111111
+1
100000000 = 0
Bit “vai um” (carry in)
- é ignorado
15
Representação em Complemento de Dois
• Casos especiais de negação (cont.)
-128 = 10000000 (c-2)
Complemento booleano = 01111111
+1
10000000 = -128 
– Anomalia se deve ao fato que uma palavra de n
bits pode conter 2n representações distintas
• 2n é um número par
• Sendo representados números positivos, negativos e o
0, a qtde de números positivos e negativos são
16
diferentes
Representação em Complemento de Dois
• Adição
1001
+0101
1110
(a) (-7) + (+5) = -2
1100
+0100
10000
(b) (-4) + (+4) = 0
0011
+0100
0111
(c) (+3) + (+4) = +7
1100
+1111
11011
(d) (-4) + (-1) = -5
0101
+0100
1001
(e) (+5) + (+4) = +9 (overflow)
1001
+1010
10011
(f) (-7) + (-6) = -13 (overflow)
17
Representação em Complemento de Dois
• Subtração
0010
+1001
1011
(a) M = 2 = 0010
S = 7 = 0111
-S = -7 = 1001
(+2) + (-7) = -5
1011
+1110
11001
(c) M = -5 = 1011
S = 2 = 0010
-S = -2 = 1110
(-5) + (-2) = -7
0111
+0111
1110
(e) M = 7
S = -7 = 1001
-S = 7 = 0111
(+7) + (+7) = 14 (overflow)
0101
+1110
10011
(b) M = 5 = 0101
S = 2 = 0010
-S = -2 = 1110
(+5) + (-2) = +3
0101
+0010
0111
(d) M = 5 = 0101
S = -2 = 1110
-S = 2 = 0010
(+5) + (+2) = +7
1010
+1100
10110
(f) M = -6 = 1010
S = 4 = 0100
-S = -4 = 1100
(-6) + (-4) = -10 (overflow)
18
Representação de Ponto Flutuante
• Usada para representar números muito
grandes ou muito pequenos
– Para números decimais, usa-se a notação
científica
• 976.000.000.000.000 = 9,76 x 1014
• 0,0000000000000976 = 9,76 x 10-14
• Para números binários, temos:
 M B
Sinal
Mantissa
E
Expoente
19
Representação de Ponto Flutuante
• Um mesmo número pode ser
representações em ponto flutuante
várias
24 = 0,110 x 25 = 110 x 22 = 0,0110 x 26
• Para simplificar as operações, é requerido que
os números sejam normalizados
 0,1 b0b1b2 ...bn  2
E
Dígitos binários
implícito
20
Representação de Ponto Flutuante
Sinal da
mantissa
8 bits
23 bits
Expoente
polarizado
Mantissa
32 bits
• o sinal é armazenado no primeiro bit da palavra
• o primeiro bit da mantissa verdadeira é sempre 1
- por isso não precisa ser armazenado
• o valor 127 é adicionado ao expoente verdadeiro,
sendo o resultado denominado Expoente Polarizado
Exemplos:
• 856.064 = 0,11010001 x 210100 = 0
• -856.064 = -0,11010001 x 210100 = 1
• 209 x 2-28 = 0,11010001 x 2-10100 = 0
• -209 x 2-28 = -0,11010001 x 2-10100 = 1
10010011
10010011
01101011
01101011
10100010000000000000000
10100010000000000000000
10100010000000000000000
10100010000000000000000
21
Representação de Ponto Flutuante
• Intervalos de representação para 32 bits:
– Números negativos:
• [-(1-2-24) x 2128 , -0,5 x 2-127]
-(1-2-24) x 2128 = 1 11111111 11111111111111111111111
-0,5 x 2-127 = 1 00000000 00000000000000000000000
– Números positivos:
• [0,5 x 2-127 , (1-2-24) x 2128]
0,5 x 2-127 = 0 00000000 00000000000000000000000
(1-2-24) x 2128 = 0 11111111 11111111111111111111111
22
Representação de Ponto Flutuante
Overflow em
Números Negativos
Overflow em
Números Positivos
Números inteiros
representáveis
-231
0
Underflow em
Números Negativos
231-1
Underflow em
Números Positivos
Overflow em
Números Negativos
Overflow em
Números Positivos
Números negativos
representáveis
-(1-2-24) x 2128
-0,5 x 2-127
Números positivos
representáveis
0 -0,5 x 2-127
-(1-2-24) x 2128
23
Representação de Ponto Flutuante
• O underflow é menos crítico que o overflow,
pois o valor pode ser aproximado para 0
• Não há, à princípio, representação para 0
– Na verdade, há um padrão de bits especial para
representação do 0
• O número máximo de valores distintos
representáveis continua sendo 232
– A representação em ponto flutuante apenas
divide esses valores em duas faixas
24
Representação de Ponto Flutuante
• Há uma relação estreita entre os tamanhos
dos campos reservados à mantissa e ao
expoente
• Para um tamanho fixo de palavra:
– Se o número de bits reservados à mantissa
aumentar, aumenta-se a precisão, mas diminui-se
a faixa de valores representáveis
– Se o número de bits reservados ao expoente
aumentar, aumenta-se a faixa de valores
representáveis, mas diminui-se a precisão
25
Representação de Ponto Flutuante
• Padrão IEEE 754
8 bits
Formato
Simples
Expoente
polarizado
Sinal da
mantissa
Mantissa
32 bits
Sinal da
mantissa
Formato
Duplo
23 bits
11 bits
52 bits
Expoente
polarizado
Mantissa
64 bits
26
Representação de Ponto Flutuante
• Valores especiais definidos no IEEE 754
Expoente Polarizado
Sinal
Formato
Simples
Formato
Duplo
Mantissa
Valor
0
0
0
0
0
1
0
0
0
-0
0
255
2047
0
∞
1
255
2047
0
-∞
0 ou 1
255
2047
≠0
NaN
27
Representação de Ponto Flutuante
• Parâmetros do formato IEEE 754
Parâmetro
Formato Simples
Formato Duplo
Tamanho da palavra
32
64
Tamanho do expoente
8
11
Polarização do expoente
127
1023
Expoente máximo
127
1023
Expoente mínimo
-126
-1022
Tamanho da mantissa
23
52
Número de expoentes
254
2046
Número de mantissas
223
252
Número de valores
1,98 x 231
1,99 x 263
28
Download