A Informação e sua Representação (Parte I) DSC/CEEI/UFCG A Informação e sua Representação Em um computador são armazenados e processados apenas dados e instruções. Um computador executa operações sobre dados numéricos (os números) ou alfabéticos (letras e símbolos). É preciso definir uma forma de representar os dados, codificados em uns e zeros, que possam ser interpretados pelo computador, de forma correta e eficiente (com bom desempenho e pouco consumo de memória). DSC/CEEI/UFCG 2 A Informação e sua Representação Os dados podem ser: Alfabéticos – letras, números e símbolos (codificados em ASCII e EBCDIC) Numéricos – ponto fixo, números inteiros – ponto flutuante (números reais ou fracionários) – BCD (representação decimal codificada em binário) Lógicos – Variáveis que possuem apenas dois valores para representação (FALSO e VERDADEIRO). DSC/CEEI/UFCG 3 Representação de Números Inteiros Todos os dados numéricos são representados em um computador como uma seqüência de 0s e 1s. Os números podem ser positivos ou negativos. As operações aritméticas, em particular a subtração, podem originar resultados negativos. Um aspecto primordial a ser definido seria então como representar o sinal. Como é que um computador sabe que um dado número é negativo? DSC/CEEI/UFCG 4 Representação de Números Inteiros A resposta a esta pergunta é que isso depende da convenção usada na representação de números. As convenções mais usuais são as seguintes : Representação de grandeza com sinal (sinal e magnitude) Representação em complemento de 2 Outras formas de representação: Complemento de 1: para negar o valor de um número deve-se inverter os bits do sinal (obsoleta) e Excesso de 2m-1: representação do número é dada pela soma de seu valor absoluto com 2m-1. Exemplo: Um sistema de 8 bits é chamado de excesso de 128 e um número é armazenado com seu valor real somado a 128. Ex.:-3=011111012 (-3+128=125) DSC/CEEI/UFCG 5 Representação de grandeza com sinal O bit mais significativo representa o sinal: • 0 (indica um número positivo) • 1 (indica um número negativo) Os demais bits representam a grandeza (magnitude). sinal magnitude O valor dos bits usados para representar a magnitude independe do sinal (sendo o número positivo ou negativo, a representação binária da magnitude será a mesma). Exemplos: (8 bits) DSC/CEEI/UFCG 001010012 = +4110 101010012 = - 4110 6 Representação de grandeza com sinal Exemplos: (8 bits) Valor decimal Valor binário com 8 bits (7 + bit de sinal) +9 00001001 -9 10001001 +127 01111111 -127 11111111 Assim, uma representação em binário com n bits teria disponível para a representação do número n-1 bits (o bit mais significativo representa o sinal). DSC/CEEI/UFCG 7 Representação de grandeza com sinal Apresenta uma grande desvantagem: ela exige um grande número de testes para se realizar uma simples soma de dois números inteiros. Requer que na UAL existam dois circuitos distintos para a adição e a subtração. Existem duas representações para o zero. DSC/CEEI/UFCG 8 Representação em complemento de 2 Representação de números inteiros positivos igual à representação de grandeza com sinal. Representação de números inteiros negativos mantém-se os bits menos significativos da direita para a esquerda até à ocorrência do primeiro bit igual a 1 (inclusive), sendo os bits restantes complementados de 1. Esta operação equivale a realizar: complemento de 1 + 1. Exemplo : (8 bits) DSC/CEEI/UFCG Exemplo : (8 bits) 000011002 = +1210 001010012 = +4110 11110100c2 = -1210 11010111c2 = -4110 9 Representação em complemento de 2 Exemplo: Números inteiros codificados em binário de 8 bits em um sistema que utiliza complemento de 2: (-128, -127, ..., -2. -1, 0, +1, +2,..., +127) {10000000, 10000001, ..., 11111110, 11111111, 00000000, 00000001, 00000010, ..., 01111111} Bit mais significativo informação de sinal (0 = positivo e 1 = negativo) DSC/CEEI/UFCG 10 Representação em complemento de 2 DSC/CEEI/UFCG Requer um só circuito (somador) para fazer a adição e a subtração. Há apenas uma representação para o valor 0 (disponibilidade para mais uma representação) mais um número negativo pode ser representado (para 8 bits, pode-se representar o número –12810 100000002) . A quantidade de números positivos é diferente da quantidade de números negativos. 11 Representação de Números Inteiros Exemplo: Escreva os números decimais abaixo nas seguintes representações: sinal e magnitude; representação em complemento de 1; representação em complemento de 2 e excesso de 128 (utilizando 8 bits, se existir representação). a) -1 b) –20 c) –127 d) –128 DSC/CEEI/UFCG 12 Representação de Números Inteiros Números negativos de 8 bits expressos em 4 sistemas diferentes N N -N -N -N -N (decimal) (binário) (sinalmagnitude) (complemento de 1) (complemento de 2) (excesso de 128) 1 00000001 10000001 11111110 11111111 01111111 2 00000010 10000010 11111101 11111110 01111110 3 00000011 10000011 11111100 11111101 01111101 4 00000100 10000100 11111011 11111100 01111100 10 00001010 10001010 11110101 11110110 01110110 20 00010100 10010100 11101011 11101100 01101100 100 01100100 11100100 10011011 10011100 00011100 127 01111111 11111111 10000000 10000001 00000001 Não existe representação Não existe representação 10000000 00000000 128 DSC/CEEI/UFCG 13 Representação de Números Reais Em alguns tipos de cálculo, a faixa de variação dos números envolvidos é muito grande. Exemplo: – – – – 1) Massa do elétron - da ordem de 9 x 10-28 gramas 2) Massa do Sol - aproximadamente igual a 2 x 1033 gramas Faixa de variação: > 1060 Exemplo de representação (34 dígitos à esquerda do ponto decimal e 28 dígitos à direita do mesmo) 1) 0000000000000000000000000000000000.0000000000000000000000000009 2) 2000000000000000000000000000000000.0000000000000000000000000000 Como representar esses números no computador? DSC/CEEI/UFCG 14 Representação de Números Reais Forma usual de representação de números reais: parte inteira, vírgula (ou ponto), parte fracionária. Esta representação, embora cômoda para cálculos no papel, não é adequada para processamento no computador. Exemplo: 45,724 DSC/CEEI/UFCG 15 Representação de Números Reais O número 45,724 pode ser expresso como: • 45,724 x 100 • 45724 x 10-3 • 0,45724 x 102 É necessário o uso de um sistema de representação de números no qual a faixa de variação dos números seja independente do número de dígitos significativos dos números representados. DSC/CEEI/UFCG 16 Representação em Ponto Flutuante Uma maneira de separar a faixa de variação dos números de sua precisão consiste em representá-lo na notação científica. n = f x 10e f - fração ou significando (ou mantissa) e - expoente (inteiro positivo ou negativo) Qualquer número (inteiro ou fracionário) pode ser expresso no formato número x baseexpoente, podendo-se variar a posição da vírgula e o expoente. Denominação (computacional): representação em ponto flutuante (o ponto varia sua posição, modificando, em conseqüência, o valor representado). DSC/CEEI/UFCG 17 Representação em Ponto Flutuante Representação pode variar (“flutuar”) a posição da vírgula, ajustando a potência da base. Exemplos: • 3,14 = 0,314 x 10-1 = 3,14 x 100 • 0,000001= 0,1 x 10-5 = 1,0 x 10-6 • 1941 = 0,1941 x 104 = 1,941 x 103 A faixa de variação dos números é determinada pela quantidade de dígitos do expoente e a precisão é determinada pela quantidade de dígitos do significando. DSC/CEEI/UFCG 18 Representação em Ponto Flutuante Forma normalizada: usa um único dígito antes da vírgula, diferente de zero (*). Na representação computacional de números em ponto flutuante, a representação normalizada é, em geral, melhor que a não-normalizada. – Forma normalizada: só existe uma forma de representar um número. – Forma não normalizada: um mesmo número pode ser representado de diversas maneiras. (*) Padrão IEEE 754 para números em ponto flutuante – significando normalizado – começa com um bit 1, seguido de um ponto (vírgula) binário e pelo resto do significando (número = ± 1,_ _ ... x 2exp ) Mantissa normalizada - começa com o ponto (vírgula) binário seguido por um bit 1 e pelo resto da mantissa (bit antes da vírgula igual a zero). DSC/CEEI/UFCG 19 Representação em Ponto Flutuante Ilustração: No sistema binário: 110101 = 110,101x23 = 1,10101x25 = 0,0110101x27 Números armazenados em um computador - os expoentes serão também gravados na base dois Como 310 = 112 e 7=1112 110,101 x (10)11 = 1,10101x(10)101 = 0,0110101x(10)111 Representação normalizada - há apenas um “1” antes da vírgula Exemplo: 1,10101x(10)101 DSC/CEEI/UFCG 20 Representação em Ponto Flutuante Algumas definições: No número 1,10101x(10)101: • 1,10101 = significando • 101 = expoente OBS: – a base binária não precisa ser explicitada (o computador usa sempre esta) – O “1” antes da vírgula, na representação normalizada – se esta for adotada, também pode ficar implícito, economizando um bit (“bit escondido”) DSC/CEEI/UFCG 21 A Informação e sua Representação (Parte II) DSC/CEEI/UFCG Operações aritméticas – Sistema Binário Adição Subtração Multiplicação Divisão As operações aritméticas nos sistemas binário, octal, decimal e hexadecimal obedecem a regras similares. DSC/CEEI/UFCG 23 Adição – Sistema binário DSC/CEEI/UFCG Adição deslocamento à direita na série, cada deslocamento correspondendo a adição de uma unidade. Adição entre dois números de um algarismo pode-se obter resultados com um ou dois dígitos. Estouro (maior algarismo é ultrapassado): Carry (transporte) ou vai-um. 24 Adição – Sistema binário Regra: DSC/CEEI/UFCG 25 Subtração – Sistema binário DSC/CEEI/UFCG Inversa à adição deslocamento à esquerda do minuendo de tantas unidades quantas forem o subtraendo. Se o minuendo é menor que o subtraendo ? Estouro subtrair uma unidade do minuendo ou somar uma unidade ao subtraendo da casa seguinte. Estouro borrow (empréstimo) ou vem-um. 26 Subtração – Sistema binário Regra: DSC/CEEI/UFCG 27 Outras Operações Aritméticas Multiplicação – Sistema binário Regra 00=0 01=0 10=0 11=1 Multiplicação pela base Desloca-se os algarismos de um número para a esquerda ou a sua vírgula para a direita. DSC/CEEI/UFCG 28 Outras Operações Aritméticas Divisão – Sistema binário DSC/CEEI/UFCG Procedimento igual ao dos decimais, considerandose apenas que: 0/1 = 0 e 1/1 = 1. Divisão pela Base Deslocando-se os algarismos de um número para a direita ou a sua vírgula para a esquerda. 29 A Informação e sua Representação DSC/CEEI/UFCG Aritmética em Sinal e Magnitude Aritmética em Complemento de 2 30 Aritmética em Sinal e Magnitude Algoritmo para operação aritmética de adição: Verificam-se os sinais dos números e efetua-se uma comparação entre eles. Se ambos os números têm o mesmo sinal, somam-se as magnitudes; o sinal do resultado é o mesmo das parcelas. Se os números têm sinais diferentes: a) identifica-se a maior das magnitudes e registra-se o seu sinal; b) subtrai-se a magnitude menor da maior (apenas as magnitudes); c) sinal do resultado é igual ao sinal da maior magnitude. DSC/CEEI/UFCG 31 Aritmética em Sinal e Magnitude DSC/CEEI/UFCG Exemplo: Realize as operações aritméticas a seguir (em sinal e magnitude). Considere a palavra de dados com 6 bits. a) (+13)10 + (+12)10 b) (+18)10 + (-11)10 c) (-21)10 + (+10)10 d) (-17)10 + (-9)10 e) (+17)10 + (+19)10 f) (-17)10 + (-19)10 32 Aritmética em Sinal e Magnitude Solução: a) (+13)10 + (+12)10 +13 001101 +18 010010 +12 001100 -11 101011 +25 011001 +7 000111 c) (-21)10 + (+10)10 DSC/CEEI/UFCG b) (+18)10 + (-11)10 d) (-17)10 + (-9)10 -21 110101 -17 110001 +10 001010 -9 101001 - 11 101011 -26 111010 33 Aritmética em Sinal e Magnitude Solução: a) (+17)10 + (+19)10 b) (-17)10 + (-19)10 “vai 1” “vai 1” +17 010001 -17 110001 +19 010011 -19 110011 +36 100100 -36 100100 overflow Estouro (overflow) - existência de um “vai 1” para o bit de sinal. DSC/CEEI/UFCG Faixa de representação de valores para 6 bits (em sinal e magnitude) -31 a + 31. 34 Aritmética em Sinal e Magnitude Subtração (Minuendo - Subtraendo = Resultado) Algoritmo para operação aritmética de subtração: 1. Troca-se o sinal do subtraendo. 2. Procede-se como no algoritmo da adição. DSC/CEEI/UFCG 35 Aritmética em Sinal e Magnitude Exemplo: Realize as operações aritméticas a seguir (em sinal e magnitude). Considere a palavra de dados com 6 bits. a) (-18)10 - (+12)10 b) (-27)10 - (-14)10 c) (+27)10 - (+31)10 d) (+19)10 - (-25)10 DSC/CEEI/UFCG 36 Aritmética em Sinal e Magnitude Solução: a) (-18)10 - (+12)10 -1210 -18 110010 -27 111011 -12 101100 +14 -30 111110 -13 101101 c) (+27)10 - (+31)10 -3110 DSC/CEEI/UFCG b) (-27)10 - (-14)10 +27 011011 -31 111111 -4 100100 vai 1 overflow +1410 001110 d) (+19)10 - (-25)10 +2510 +19 010011 +25 011001 +44 101100 37 Aritmética em Sinal e Magnitude DSC/CEEI/UFCG O problema encontrado pelos fabricantes de computadores na implementação da ULA (Unidade Lógica e Aritmética) que efetuasse operações aritméticas com valores representados em sinal e magnitude residiu, principalmente, em dois fatores: custo e velocidade. Custo - necessidade de construção de dois elementos, um para efetuar somas e outro para efetuar subtração (dois componentes eletrônicos). Velocidade - ocasionada pela perda de tempo gasto na manipulação dos sinais, de modo a determinar o tipo de operação e o sinal do resultado. 38 Aritmética em Sinal e Magnitude DSC/CEEI/UFCG Outro inconveniente: dupla representação para o zero , o que requer um circuito lógico específico para evitar erros de má interpretação. Sistemas modernos não empregam aritmética em sinal e magnitude, a qual foi definitivamente substituída pela aritmética em complemento de 2 (no caso de representação em ponto fixo). 39 Aritmética em Complemento de 2 Algoritmo para operação aritmética de adição: 1. Somar os dois números, bit a bit, inclusive o bit de sinal. 2. Desprezar o último “vai 1” (para fora do número), se houver. 3. Se, simultaneamente, ocorrer “vai 1” para o bit de sinal e “vai 1” para fora do número, ou se ambos não ocorrerem, o resultado está correto. 4. Se ocorrer apenas um dos dois “vai 1” (ou para o bit de sinal ou para fora), o resultado está incorreto. Ocorreu um overflow. DSC/CEEI/UFCG O overflow somente pode ocorrer se ambos os números tiverem o mesmo sinal (seja positivo ou ambos negativos) e, nesse caso, se o sinal do resultado for oposto ao dos números. 40 Aritmética em Complemento de 2 Algoritmo para operação aritmética de subtração: 1. Complementar a 2 o subtraendo, independentemente se é um valor positivo ou negativo. 2. Somar os números, utilizando o algoritmo da adição já mostrado anteriormente. DSC/CEEI/UFCG 41 Aritmética em Complemento de 2 DSC/CEEI/UFCG Exemplo: Realize as operações aritméticas a seguir (em complemento de 2). Considere a palavra de dados com 6 bits. a) (+13)10 + (+15)10 b) (+23)10 + (+20)10 c) (+15)10 + (-13)10 d) (+20)10 - (+17)10 e) (-24)10 - (-15)10 f) (-24)10 - (+15)10 42 Aritmética em Complemento de 2 Solução: a) (+13)10 + (+15)10 b) (+23)10 + (+20)10 001111 +13 001101 +23 010111 +15 001111 +20 010100 +28 011100 +43 101011 Resultado correto - não houve “vai 1” nem para o bit de sinal nem para fora do número. DSC/CEEI/UFCG 010100 Resultado incorreto - houve “vai 1” apenas para o bit de sinal. Overflow - faixa de representação para 6 bits (-32 a 31) 43 Aritmética em Complemento de 2 Solução: c) (+15)10 + (-13)10 d) (+20)10 - (+17)10 111111 111100 +15 001111 +20 010100 -13 110011 -17 101111 +2 000010 +3 000011 Resultados corretos - houve “vai 1” para o bit de sinal e para fora do número; este é desprezado. DSC/CEEI/UFCG 44 Aritmética em Complemento de 2 Solução: e) (-24)10 - (-15)10 f) (-24)10 - (+15)10 001000 -24 101000 -24 101000 +15 001111 -15 110001 -9 110111 -39 011001 Resultado correto - não houve “vai 1” para o bit de sinal nem para fora do número. DSC/CEEI/UFCG 100000 Resultado incorreto - houve “vai 1” apenas para fora do número. Overflow - faixa de representação para 6 bits (-32 a 31) 45 Aritmética em Complemento de 2 Resumindo, é importante lembrar que: As operações de adição e subtração são normalmente realizadas como adição. As operações de subtração são realizadas como soma de complemento (minuendo mais o complemento do subtraendo). Se o resultado encontrado é um valor positivo: o valor decimal correspondente da magnitude é obtido por pura conversão de base 2 para base 10. Se o resultado encontrado é um valor negativo: DSC/CEEI/UFCG O valor está representado em complemento de 2. 46 Aritmética em Complemento de 2 A aritmética em complemento de 2 requer apenas um componente (somador) para somar dois números e um componente que realize a operação de complementação. O algoritmo básico refere-se, então, à soma dos números, considerando-se que os números negativos estejam representados em complemento de 2; ele acusa, também, se o resultado ultrapassar a quantidade de bits representáveis na ULA, overflow. Pode-se efetuar a multiplicação através de sucessivas somas e a divisão através de sucessivas subtrações (processo lento!). DSC/CEEI/UFCG 47 Operações aritméticas – Sistema Binário Observação: DSC/CEEI/UFCG A multiplicação em computadores pode ser feita por um artifício: para multiplicar um número A por n, basta somar A com A, n vezes. Por exemplo, 4 x 3 = 4 + 4 + 4. A divisão também pode ser feita por subtrações sucessivas! O que concluímos? Uma operação aritmética pode ser realizada em computadores apenas através de somas (diretas ou em complemento)! 48