2 Representação numérica Agora que já conhecemos um pouco da história da Computação e da arquitetura de um computador, estudaremos como podemos representar números em outras bases numéricas e como algumas operações básicas podem ser realizadas sobre esses números a fim de compreender como um computador realiza certos cálculos. 2.1. Bases mais estudadas em Computação O sistema numérico que nós utilizamos em nosso dia-a-dia possui a base decimal, isto é, utiliza-se de dez valores para a representação dos algarismos de um número. E esses dez valores são os números de 0 a 9. Quando desejando representar um número qualquer em uma base decimal, geralmente utilizamos a representação na forma de N, onde N é composto pelos algarismos pertencentes àquele número. Entretanto, em Computação, há outras bases numéricas que podem ser empregadas, sendo as mais utilizadas a base binária e a base hexadecimal. A base binária, como o próprio nome diz, é aquela em que somente dois valores são admitidos para representar os algarismos de um número e tais valores são 0 e 1. Esta é a forma como a informação está armazenada dentro do computador, tanto quando em memória secundária quanto quando em execução, na memória primária. Quando desejando representar um número qualquer em uma base binária, geralmente utilizamos a representação na forma de (N)2 , onde N é composto pelos algarismos pertencentes àquele número. A base hexadecimal é aquela em que 16 valores são admitidos na representação dos algarismos, sendo esses valores os números de 0 a 9, acrescidos das letras do alfabeto de A até F. Esta é uma forma comum que o computador utiliza para enviar ao usuário dados que, se representados na base binária ou decimal, assumiriam números ainda maiores quanto ao número de algarismos, como endereços de memória e códigos de erro, bem como a forma como certos programas que manipulam cores podem receber valores para uma cor. Quando desejando representar um número qualquer em uma base hexadecimal, geralmente utilizamos a representação na forma de (N)16 , onde N é composto pelos algarismos pertencentes àquele número. Se quisermos representar o número 217 na base binária, como podemos fazê-lo? Qual a melhor forma para representarmos um número em uma base qualquer? 2.1 Representação de um número em uma base qualquer Há uma regra geral para a representação de um número em uma base qualquer. Um número X qualquer na base decimal terá em uma base b qualquer os algarismos an an-1 ... a1 a0 se X = an.bn + an-1.bn-1 + ... + a1.b1 + a0 Em outras palavras: X = an.bn + an-1.bn-1 + ... + a1.b1 + a0 X = ( an an-1 ... a1 a0 ) b Estudemos agora a conversão de números de uma base numérica para outra, onde poderemos colocar tal conhecimento em prática. 2.2 Conversão de base 2.2.1 Base decimal para base binária Lembre-se bem disto: A forma mais fácil de converter um número da base decimal para qualquer outra base (inclusive a binária) é fazendo a divisão inteira desse número pelo valor da base (neste caso, 2) e até que o quociente seja zero. Neste ponto então, os restos da divisão serão os nossos algarismos, sendo o primeiro resto encontrado o termo a0 , isto é, o último algarismo, aquele que representa as unidades, e o último resto encontrado o termo an , isto é, o primeiro algarismo. Vejamos agora um exemplo mostrando como converter o número 13 da base decimal para a base binária: Sendo assim, temos que: 13 = (a3 a2 a1 a0) 2 = (1101) 2 2.2.2 Base binária para base decimal Geralmente a forma mais fácil de converter um número em uma base b qualquer (neste caso, binária) para a base decimal é utilizando-se da expressão que iguala um número na base decimal à soma dos algarismos da base b multiplicados pela base elevada aos seus respectivos expoentes (X = an.bn + an-1.bn-1 + ... + a1.b1 + a0 ). Pode até parecer complicado falando, mas na prática é bem fácil. Suponha que temos o número na base binária (1101) 2 e queremos sua representação na base decimal. Primeiro, vejamos a representação desse número binário em termos de coeficientes an: (1101) 2 = (a3 a2 a1 a0) 2 Agora, vamos utilizar da regra supracitada para descobrir quanto isso vale na base decimal: X = a3.b3 + a2.b2 + a1.b1 + a0 X = 1.23 + 1.22 + 0.21 + 1 X = 13 Sendo assim, temos que (1101) 2 = 13 2.2.3 Base decimal para base hexadecimal A conversão da base decimal para a base hexadecimal faz-se de forma similar, lembrando somente que a base para a qual se está convertendo agora é a base 16 e que os restos com valores de 10 a 15 devem ser convertidos para os seguintes algarismos: • 10 = A • 11 = B • 12 = C • 13 = D • 14 = E • 15 = F Que tal convertermos o número 678 da base decimal para a base hexadecimal? Sendo assim: 678 = (a2 a1 a0) 16 = (2A6) 16 2.2.4 Base hexadecimal para base decimal De forma similar à conversão da base binária para decimal, podemos nos utilizar das expressões para representação de um número em uma base qualquer para converter da base hexadecimal para a base decimal. Vejamos então como seria a conversão do número (2A6) 16 da base hexadecimal para a base decimal (perceba que, agora, colocaremos o valor 10 no lugar de “A” na hora de efetuar o cálculo): (2A6) 16 = (a2 a1 a0) 16 X = a2.b2 + a1.b1 + a0 X = 2.162 + 10.161 + 6 X = 512 + 160 + 6 X = 678 Sendo assim (2A6) 16 = 678 2.2.5 Base binária para base hexadecimal O processo de conversão da base binária para a base hexadecimal geralmente é feito de uma forma um pouco diferente, mas tão simples quanto tem sido até agora. Em um número binário, cada grupo de quatro algarismos poderá assumir valores de 0 a 15 que são os valores correspondentes aos que um algarismo na base hexadecimal pode acontecer. Caso você esteja curioso para entender por que isso ocorre, perceba que: 24 = 161 , o que significa que a combinação de 4 elementos com dois valores distintos dará a mesma variabilidade que a combinação de 1 elemento com 16 valores distintos ou, traduzindo para o que nos interessa aqui, 4 algarismos em uma base 2 assumem os mesmos valores possíveis que 1 algarismo na base 16. Apenas uma curiosidade: apesar de não estarmos tratando aqui da base octal (isto é, a representação numérica de um valor com somente oito algarismos possíveis), podemos dizer, a partir dessa fórmula, que 3 algarismos na base binária representam 1 algarismo na base octal. Agora que sabemos disso, precisamos agrupar os algarismos binários em grupos de 4 algarismos, começando pelo algarismo a0 e indo até o algarismo an. Você pode estar se perguntando: e como proceder caso faltem algarismos para completar o último grupo? Bem, neste caso, basta completar com zeros à esquerda do algarismo an. Depois disso, basta fazer a conversão de cada grupo para o algarismo hexadecimal desejado e aquele algarismo ocupará a mesma posição que aquele grupo ocupa no número original. Nosso problema agora, então, é quanto a converter cada grupo de quatro algarismos, não é mesmo? Vejamos, por exemplo, como podemos converter (0111)2 em hexadecimal. A forma mais simples é convertê-lo em decimal e depois no algarismo hexadecimal correspondente. Teríamos então que: (0111)2 = (a3 a2 a1 a0)2 X = a3.b3 + a2.b2 + a1.b1 + a0 X = 0.23 + 1.22 + 1.21 + 1 X=7 Entretanto, há outro jeito de calcular isso sem precisar fazer todo esse cálculo, pois como o valor de cada algarismo em uma base binária é somente zero ou um, teremos que em decimal cada termo valerá: • a0 = zero se a0 = 0, 1 se a0 = 1; • a1 = zero se a1 = 0, 2 se a1 = 1; • a2 = zero se a2 = 0, 4 se a2 = 1; • a3 = zero se a3 = 0, 8 se a3 = 1; Então, na prática, basta somar os valores correspondentes às posições com valores diferentes de zero. Então no exemplo anterior, (0111)2, a0, a1 e a2 são diferentes de zero, o que significa que o valor em decimal que procuramos é 1 + 2 + 4 = 7. Pronto, agora é só converter para hexadecimal. E o número decimal 7 em hexadecimal também é representado por 7 (ou melhor dizendo, (7)16 ). Agora que já explicamos como funciona todo o processo, vejamos como funciona para um número um pouco maior. Convertamos (1101010111)2 para a base hexadecimal: Então, temos que (1101010111)2 = (357)16 2.2.6 Base hexadecimal para base binária Como se pode imaginar, basta executarmos o contrário do que fizemos na conversão da base binária para a hexadecimal, isto é, basta encontrarmos para cada algarismo em hexadecimal os quatro algarismos binários que representam o mesmo valor e aquele grupo deverá ocupar no novo número a mesma posição que o algarismo hexadecimal possui no número original. Veja abaixo como podemos converter (2A6)16 para a base binária: Ou seja, (2A6)16 = (001010100110)2. Bem, agora que já sabemos como converter números de uma base para outra, vejamos como podemos efetuar as operações básicas (adição, subtração, multiplicação e divisão) em bases não-decimais. 2.3 Operação de adição O processo de adição é exatamente o mesmo daquele ocorrido em bases decimais, começando-se a operação de soma a partir do algarismo de menor valor ( a0 ) e lembrando que sempre que alcançar ou exceder o valor da base há a regra do “vai a um”, onde se subtrai o valor da base do valor encontrado e soma-se um ao próximo algarismo, até que o resultado encontrado seja menor que o valor da base. Essa regra é válida para qualquer base, mas aqui estaremos estudando somente com as bases binárias e hexadecimais. 2.3.1 Na base binária A fim de treinarmos o que acabamos de aprender, façamos a soma de (1011)2 + (1010)2: Perceba que quando somamos os algarismos da segunda posição (contando do a0 até o an) de cada número (1 + 1) alcançamos o valor da base (2), motivo pelo qual aplicamos a regra do “vai a um”, quando então acrescentamos 1 ao próximo algarismo (o algarismo com valor zero, à esquerda, a terceira posição) e subtraímos o valor da base do que foi encontrado (2 – 2 = 0), sendo então este o resultado para a segunda posição. Desta forma: (1011)2 + (1010)2 = (10101)2 2.3.2 Na base hexadecimal E agora, vamos efetuar a soma de dois números hexadecimais: (25A6)16 + (3D23)16. Perceba que, quando somamos a terceira posição alcançamos um valor superior ao da base (5 + D = 18), quando aplicamos novamente a regra do “vai a um”, somando um ao próximo algarismo (2 + 1 = 3) e subtraindo a base do resultado encontrado (18 – 16 = 2), ficando então com 2 como sendo o algarismo da terceira posição de nosso resultado. Resultado final: (25A6)16 + (3D23)16 = (62C9)16 2.4 Operação de subtração A operação de subtração também ocorre de forma similar à operação na base decimal, lembrando que quando o valor a ser subtraído é maior que o termo do qual estamos subtraindo precisamos “pegar um emprestado” do próximo algarismo, o que significa que reduzimos em um o próximo algarismo e somamos o valor da base ao algarismo atual (perceba bem, somamos o valor da base!). 2.4.1 Na base binária Vejamos agora um exemplo de como se processa a operação de subtração na base binária realizando o cálculo (1011)2 – (110)2 . Perceba que no terceiro algarismo não é possível subtrair 1 de 0, então “pegamos um emprestado” do próximo algarismo e somamos 2 ao 0. Agora sim, podemos subtrair 1 de 2 e temos como resultado para aquele algarismo o valor 1. Resultado: (1011)2 – (110)2 = (101)2 2.4.2 Na base hexadecimal Agora, efetuemos uma operação de subtração na base hexadecimal. Realizemos o cálculo (2C8)16 – (1A9)16 . De forma análoga ao caso anterior, teremos na primeira posição uma subtração onde o valor subtraído (9) é maior do que o termo do qual subtraímos (8), então “pegamos um emprestado” do próximo algarismo e somamos 16 aos 8, obtendo 24 e então podemos realizar a subtração, encontrando 15 para essa posição. Basta agora converter 15 para o algarismo correspondente, que é F. Resultado: (2C8)16 – (1A9)16 = (11F)16 2.5 Operação de multiplicação Mais uma vez, dá-se o processo de forma similar à operação em base decimal, lembrando mais uma vez que, quando um valor encontrado para um algarismo for igual ou maior que o valor da base, deve-se usar a regra do “vai a um” até que o algarismo tenha um valor menor que o valor da base. Essa regra é válida para a operação de multiplicação em todas as bases, entretanto não é necessário o “vai a um” para a base binária, uma vez que cada valor é somente “zero” ou “um” e, portanto, estaremos multiplicando sempre por “zero” ou “um”, nunca então superando o valor da base (2). 2.5.1 Na base binária Vejamos agora um exemplo de multiplicação na base binária: (10)2 x (1101)2 = (11010)2. Resultado final: (10)2 x (1101)2 = (11010)2 2.5.2 Na base hexadecimal Realizemos agora uma operação de multiplicação na base hexadecimal: (A6)16 x (538)16 . Perceba que já na primeira multiplicação já atingimos um valor superior ao da base (6 x 8 = 48). Teremos então que executar o processo de “vai a um” três vezes, até que o resultado seja menor que a base (o resultado chegará a zero). Isso aconteceu porque 16 x 3 = 48, ou seja, ao subtrairmos o número 16 três vezes de 48 chegaremos ao valor zero. Teremos então como algarismo para a primeira posição o número “zero” e ao resultado da próxima multiplicação somaremos 3. O próximo algarismo a ser multiplicado por 6 é 3 e o produto dará 18, que é outra vez maior que a base. Teremos então um “vai a um”, o resultado ficará então como sendo 2, que já é menor que a base. Somamos então o 2 com o 3 que tivemos no “vai a uns” do algarismo anterior e teremos 5. Perceba que se tivesse dado um valor igual ou superior ao da base, teríamos que fazer outro “vai a um”, que seria somado com aquele já realizado para somar com o resultado da próxima multiplicação. Muito cuidado, portanto, para não se enganar no meio de tantos “vai a uns”! Resultado: (A6)16 x (538)16 = (36250)16 2.6 Operação de divisão A forma mais fácil é converter para a base decimal, efetuar o cálculo e converter para a base desejada. 2.7 Exercícios 1. Efetue os seguintes cálculos, convertendo antes os valores para cada uma das três bases (em outras palavras, para cada item, converta primeiro os operadores para as bases binária, decimal e hexadecimal e então realize os três cálculos, obtendo assim o resultado para cada uma das bases): a) 3 + 5 b) 12 + 16 c) (10110)2 + (10100)2 d) (AF8)16 + (5C0)16 e) (10110)2 + (5C0)16 f) 120 - 31 g) (1011101)2 – (100110)2 h) (AF8)16 – (5C0)16 i) (AF8)16 – (1011101011)2 j) (CB)16 x (101)2