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