Prévia do material em texto
Organização de Computadores Antônio Borges / Gabriel P. Silva Atualizado em 28/5/2004 17:38 2. Sistemas de Numeração 2.1. Introdução A necessidade de contar é algo que acompanha o ser humano desde tempos imemoriais. Muitas cavernas pré-históricas registram contagens, provavelmente de animais, na forma de pauzinhos colocados um ao lado do outro, e agrupados por traços diagonais, para me- lhorar a leitura, como na Figura 2.1. Figura 2.1 Diversas formas de contar e representar números foram inventadas e efetivamente utili- zadas por muitos povos. Quando crianças, nós aprendemos a contar nos dedos das duas mãos, de um até dez, e isso nos parece a coisa mais natural do mundo. Porém muitos povos da antiguidade contavam usando uma outra tática, mais eficiente do que a nossa, provavelmente, com uma mão só: eles usavam o polegar para indicar em cada dedo a falange, falanginha e falangeta, e assim, cada dedo podia contar 3 números, possibilitan- do a contagem de 12 números em cada mão (3 x 4, tirando o polegar obviamente, que era usado para apontar), como visto na Figura 2.2. Figura 2.2 Organização de Computadores Antônio Borges / Gabriel P. Silva Atualizado em 28/5/2004 17:38 Tanto naqueles povos antigos quanto no mundo de hoje, a contagem de pequenas quan- tidades poderia facilmente ser feita com uma ou duas mãos. Porém quando essa quanti- dade aumenta, é necessário usar alguma outra tática. Muitas possibilidades existem para manipular números maiores. Para levarmos uma quantidade razoável de dinheiro, nós hoje usamos notas de diferentes valores, de um real, cinco reais, dez, cinqüenta, cem, etc., , ao invés de uma montanha de notas de um real. De forma muito parecida, os roma- nos faziam mais ou menos isso, usando as letras I, V, X, L, C, etc. para registrar os núme- ros grandes. A representação de um certo valor em notas de dinheiro não é unívoca, como a notação romana também não o era. Seria possível, por exemplo, representar XXXXXX para o número 60 mas na prática se preferia-se a notação LX, mas assim como nós geralmente preferimos uma nota de 50 e outra de 10 e não seis notas de 10. Não havia na notação romana a representação explícita do zero, e a necessidade do uso do zero apareceu um bom tempo depois. Explicando melhor: pense que só existam as notas de dinheiro de 1, 10 e 100 reais. Para representar o valor 372, poderíamos dizer: 3 notas de 100, 7 notas de 10 e 2 notas de 1. Já para representar o valor 302, poderíamos dizer 3 notas de 100, ZERO notas de 10 e 2 notas de 1. Essa informação de ZERO notas de 10 é inócua, e realmente não se usa na prática, como os romanos também não usa- vam nos seus números. Tanto os romanos quanto nós hoje usamos fortemente o número 10 como um padrão importante na representação da contagem (na verdade os romanos também usavam o número 5). Isso é fácil de aceitar: temos 10 dedos (ou 5 dedos em cada mão). Mas os babilônios contavam 12 em cada mão, e não 10. Então deve-se esperar que usassem números diferentes. Por exemplo, um mercador contava 1, 2, 3, 4 ...12 (acabavam os dedos da mão) e conti- nuava contando: uma mão mais 1, uma mão mais 2, uma mão mais 3, etc. No registro escrito usado na babilônia usavam-se dois símbolos numéricos um ao lado do outro. O primeiro indicava a quantidade de mãos, o segundo a quantidade de dedos no fim da con- tagem. Por razões que não vale a pena explicar neste contexto, a contagem básica ia até 60 (5 dedos numa mão e 12 falanges na outra). Ainda hoje temos herança da contagem babilônica nos nossos relógios, que contam 12 horas e não 10. Nota: Deve-se notar que o uso da contagem até 60 é muito interessante: este número é múltiplo de 2, 3, 4, 5 e 6 (além de outros), trazendo simplicidade para as operações aritméticas envolvendo divisão, quando realizadas mentalmente. Uma invenção bastante interessante apareceu com os hindus por volta do século V e consistia no uso, lado a lado de dígitos, representando valores multiplicativos. Por exem- plo, imaginemos notas de 1, 10 e 100 reais. Então, podemos pensar assim: 3 notas de 100 reais, 7 notas de 10 reais e 2 notas de 1 real. Então não usamos o valor das notas e colocamos apenas a quantidade de bilhetes. Usamos a escrita da esquerda para a direita na ordem decrescente dos valores dos bilhetes, assim: 3 7 2. A própria forma de falar este número é uma imagem desta representação: trezentos (ou três centos) e setenta (ou sete entes) e dois. Nesta representação, originalmente se deixava um espaço (e não um zero) para indicar que numa casa específica não existia um fator multiplicativo. Por exemplo, se escrevia 3_2 para representar o número 302. O símbolo zero foi inventado para facilitar a leitura Organização de Computadores Antônio Borges / Gabriel P. Silva Atualizado em 28/5/2004 17:38 deste espaço. O zero é um símbolo que, ao ser multiplicado por qualquer outro produz um resultado nulo. Zero reais, ou zero dezenas (ou seja zero vezes 10), ou zero centenas (ou seja zero vezes cem), tudo produz um valor nulo. Nota: Fatores religiosos foram usados para proibir durante muitos anos o uso do zero. A razão parece estranha, mas do ponto de vista teológico é extremamente válida. Deus é representado religiosamente como sendo o UM, a unidade, o início de tudo; então como poderia existir uma coisa que vem antes do UM? Esta polêmica religiosa prosseguiu du- rante mais de um século, até que as vantagens inequívocas do uso matemático do zero acabaram por tornar esta discussão menos aceitável. Note que seria possível usar quaisquer valores para notas de dinheiro, mas os registros históricos mostram que essa invenção usava necessariamente em operações matemáti- cas, valores múltiplos para as casas representadas: 1, 10, 100, 1000, etc. Esses valores fundamentais para as casas é denominado em matemática de BASE do sistema de nu- meração posicional. Mas porque usamos base 10? Claro, temos 10 dedos. Mas os babilônios usavam a base 10? Certamente não. Pense a respeito e faça uma pesquisa sobre como eles provavel- mente faziam para escrever seus números. Nota: E se fôssemos habitantes de Andrômeda, que têm 6 dedos em cada uma das suas 2 mãos, como contaríamos? E se fôssemos habitantes de Alfa Centauro, que têm 8 de- dos em cada uma das suas 4 mãos, como faríamos? Leia mais sobre a interessante história dos sistemas de numeração em http://www.mediatinker.com/whirl/zero/zero.html 2.2. Representação posicional de números Com a evolução da matemática a numeração posicional se estabeleceu em praticamente todos os países. Nesta notação, os algarismos (dígitos) são colocados lado a lado, e sua posição indica uma potência da base pela qual eles serão multiplicados. Na base 10 (ou seja usando o sistema de numeração que conhecemos desde o curso primário, e que faz uso dos dígitos 0, 1, 2, 3, 4, 5, 6, 7, 8, 9), um número é representado como no exemplo a seguir: ou seja: Organização de Computadores Antônio Borges / Gabriel P. Silva Atualizado em 28/5/2004 17:38 10 é a base e os números 100, 10 e 1 são respectivamente: 100 = 102 10 = 101 1 = 100 Nota: talvez você tenha esquecido, então lembre-se: todo número elevado a zero vale um. 372 = 3 x 102 + 7 x 101 + 2 x 100 A operação de contagem na base 10 é simples. Cada casa começa com 0, e quando se chega a 9 a próxima casa é incrementada. Por simplicidade, zeros à esquerda não preci- sam ser escritos. Por exemplo, usando 3 dígitos: e assim por diante. Quando se atinge 99 começa-se a contar novamente, considerando mais um dígito igual a 1, ou seja 100, 101, 102, etc... A mesma coisa acontece em 999 ou 9999 ou 99999. Na vida diária de hoje, em quase todos os países do mundo, a base 10 é a campeã abso- luta. Entretanto poderíamos efetivamente usar outras bases (diversos povos muito evoluí- dos, como os babilônios, usaram bases não decimais). Imagine por exemplo escolhermosusar a base 5 (ou seja, contar apenas com uma das mãos). Neste sistema de numeração existiriam 5 dígitos básicos: 0, 1, 2, 3 e 4. Vamos então contar, usando apenas esses dígitos: Organização de Computadores Antônio Borges / Gabriel P. Silva Atualizado em 28/5/2004 17:38 e assim por diante. Repare que não existe nesta base 5 o número 5, bem como nenhum numero formado por dígitos diferentes de 0, 1, 2, 3 ou 4. Poderíamos tentar estabelecer um paralelo entre a base 5 e a base 10. Para não nos con- fundirmos vamos colocar um subscrito após o número para diferenciar, por exemplo 1310 indica um número 13 decimal usual, e 135 indica um número na base 5. Se contarmos na base 5, teremos a seguinte seqüência: 0, 1, 2, 3, ,4, 10, 11, 12, 13, 14, 20, 21, etc., por- tanto o número 135 será o oitavo número contado. Podemos dizer então que: 135 = 810 Veremos mais adiante algumas técnicas bastante simples sobre como converter números representados em diversas bases. 2.3. Numeração binária A base 10 era usada também nos primeiros computadores eletromecânicos, como o Mark I. Diversos matemáticos e engenheiros estavam naquela época envolvidos com a criação de computadores e seus programas, mas logo estes cientistas perceberam que os circui- tos elétricos que eram usados para implementar operações aritméticas eram bastante complexos exatamente pelo fato de que a base 10 usa 10 representações diferentes para os dígitos. Passou-se então a utilizar um esquema alternativo muito mais confiável eletricamente e mais econômico usando, não 10 dígitos, mas apenas dois dígitos, o zero e o um (em ou- tras palavras, passou-se a usar a base 2). É fácil entender o porquê disso: o zero poderia ser facilmente associado a um circuito elétrico desligado e o um a um circuito ligado: isso é muito mais simples de implementar, por exemplo, do que um circuito que tenha internamente diversos (10) níveis de tensão. Nesta base a contagem dos números seria assim: 0 10 100 110 1000 1 11 101 111 ... Dá facilmente para estabelecer que: Organização de Computadores Antônio Borges / Gabriel P. Silva Atualizado em 28/5/2004 17:38 02 = 010 12 = 110 102 = 210 112 = 310 1002 = 410 1012 = 510 e assim por diante. Alguém poderia objetar que um número binário relativamente pequeno teria muitos dígitos se comparado à sua contraparte na base 10. Realmente: 11111111112 = 102310 mas a simplicidade e tamanho dos circuitos é imensamente menor e compensa essa dife- rença. 2.4. A base hexadecimal Existe, entretanto, um problema: quando nós, seres humanos, queremos exprimir um nú- mero na base 2, também chamada base binária, a possibilidade de transcrição com erro é imensa pois os números têm muitos dígitos. Assim, é comum que nós, programadores, utilizemos duas outras bases alternativas, cuja conversão para a base 2 é quase imediata e pode ser feita sem calculadora, como veremos adiante: a base 8 (hoje em desuso) e a base 16, também chamada base hexadecimal. Veremos mais adiante como essas bases são usadas para a escrita simplificada e alternativa de números binários. Talvez você nem acredite nisso, mas é facílimo converter “de cabeça”: 34142578 = 0111000011000101011112 Todas as linguagens de programação moderna prevêem facilidades para escrita de nú- meros hexadecimais (e algumas, como a linguagem C, também para a base 8). A dispo- nibilidade de uso de uma base não decimal poderia causar um certo espanto a princípio, mas a razão é simples: essas bases são usadas para tornar a escrita de números biná- rios por seres humanos, mais simples e menos sujeita a erro. Na base 8 existiriam 8 dígitos básicos: 0, 1, 2, 3, 4, 5, 6 e 7. Vamos então contar, usando apenas esses dígitos: e assim por diante. Organização de Computadores Antônio Borges / Gabriel P. Silva Atualizado em 28/5/2004 17:38 Repare que não existe nesta base 8 o dígito 8, e que só existem números formados por dígitos entre 0 e 7. Depois do número 778 vem o número 1008. Já na base 16 temos um problema: existirão 16 símbolos diferente. Entretanto, desde a escola primária, estamos acostumados a usar apenas 10 dígitos (de 0 a 9). Como fazer para representar os seis dígitos que faltam? A solução mais usada, especialmente para não ter que inventar novos símbolos é usar as letras A, B, C, D, E e F para representar estes novos dígitos. A contagem então seria assim: e assim por diante. Depois do AF vem B0, B1,... BF. Depois do BF vem C0, C1.... CF. etc. Depois do EF vem F0, F1.... FF. Depois do FF vem 100, 101, 102 etc. É importante guardar de cabeça, por conta das conversões que teremos que realizar, uma equivalência entre as letras da representação hexadecimal e seus valores absolutos de representação na base 10. A vale 10 B vale 11 C vale 12 D vale 13 E vale 14 F vale 15 Organização de Computadores Antônio Borges / Gabriel P. Silva Atualizado em 28/5/2004 17:38 2.5. Conversão entre bases Existem motivações (sejam históricas, de costume ou eletrônicas.) para escolhermos usar uma certa base na representação dos números em determinadas situações. Nosso reló- gio apresenta as informações na bases 12 e 60, por razões completamente históricas, e isso em geral não nos traz maiores complicações (a menos que queiramos saber, por exemplo, quantas horas e minutos leva para assar 10 bolos num forno, sendo que cada um leva 6 minutos e 30 segundos para assar). Um outro exemplo, na memória dos com- putadores modernos a informação está armazenada na base 2, e a motivação é o fato de que essa escolha simplifica enormemente os circuitos eletrônicos e permite que estes sejam mais rápidos. Entretanto, nós fomos educados na base 10, e é nesta base que conseguimos raciocinar com clareza. Vamos ensinar as técnicas simples que são usadas para converter números para bases diversas, enfatizando: a base 10 – que nós conhecemos muito bem; a base 2 – útil no projeto e programação dos computadores atuais; as bases que são potência de 2, em especial a base 16 - muito usadas como uma alternativa para representar números binários de uma forma mais simples. a) Conversão de um número em qualquer base para a base 10 Nós mostramos anteriormente a representação de um número decimal comum, 372, como seria representado como uma soma de múltiplos de potências de dez: ou seja: 37210 = 3 x 100 + 7 x 10 + 2 x 1 ou ainda: 37210 = 3 x 102 + 7 x 101 + 2 x 100 Então por analogia podemos tomar um outro número em outra base qualquer, e aplicar o mesmo raciocínio. Por exemplo: o número 1428 seria calculado usando potências de 8, em vez de potências de 10. 1428 = 1 x 82 + 4 x 81 + 2 x 80 ou seja: Organização de Computadores Antônio Borges / Gabriel P. Silva Atualizado em 28/5/2004 17:38 1428 = 1 x 64 + 4 x 8 + 2 x 1 1428 = 64 + 32 + 2 = 9810 Outro exemplo, usando a base 2: repare que o último fator multiplicativo, o da direita, será sempre elevado a zero. E qualquer coisa elevada a zero NÃO DÁ ZERO, cuidado, dá UM ! 10012 = 1 x 23 + 0 x 22 + 0 x 21 + 1 x 20 = 8 + 0 + 0 + 1 = 910 Outro exemplo usando a base hexadecimal: 1C7A16 = 1 x 163 + C x 162 + 7 x 161 + A x 160 Antes de mais nada: lembre-se que, em hexadecimal: A vale 10 C vale 12 1C7A16 = 1 x 163 + 12 x 162 + 7 x 161 + 10 x 160 1C7A16 = 4096 + 3072 + 112 + 10 = 7290 b) conversão de um número na base 10 para qualquer base Para converter um número na base 10 para uma base B, a idéia é fazer divisões sucessi- vas do número pela base B, até o quociente ser zero. Então tomar os restos em ordem inversa. Exemplo: queremos calcular a representação do número 10310 na base 5. Vamos dividir sucessivamente 100 por 5. 103 ÷ 5 = 20 resto 3 20 ÷ 5 = 4 resto0 4 ÷ 5 = 0 resto 4 Agora lemos os restos de trás para diante: 10010 = 4035 Conferindo: 4 x 52 + 0 x 51 + 3 x 50 = 100 + 0 + 3 = 10310 A maior parte das pessoas faz isso na mão fazendo uma escadinha de divisões, parando quando não der mais para dividir. Neste caso não esquecer de pegar também o último quociente e juntar com os restos, em ordem reversa (ou então fingir uma última divisão em que o último quociente seja zero). Organização de Computadores Antônio Borges / Gabriel P. Silva Atualizado em 28/5/2004 17:38 Lemos último quociente e os restos de trás para diante: 10010 = 4035 Ex: converter 32710 para a base 2. 32710 = 1010001112 Ex.: converter 30010 para a base 16 (hexadecimal) O problema é resolvido exatamente da mesma maneira, lembrando-se de traduzir, sem- pre que o resto for maior que 9 pelas letras A, B, C, D, E ou F. 300 ÷ 16 = 18 resto 12 12 vale “C” 18 ÷ 16 = 1 resto 2 1 ÷ 16 = 0 resto 1 portanto 30010 = 12C16 Organização de Computadores Antônio Borges / Gabriel P. Silva Atualizado em 28/5/2004 17:38 c) conversão de números em bases potência de dois para a base binária Para entendermos a idéia desta conversão, fizemos uma contagem seqüencial usando a base 8. Do lado desta contagem colocamos a representação em binário, usando 5 dígi- tos binários. Só para facilitar a leitura usamos um espacinho separando os três dígitos binários da direita. 00 00 000 01 00 001 02 00 010 03 00 011 04 00 100 05 00 101 06 00 110 07 00 111 10 01 000 11 01 001 12 01 010 13 01 011 14 01 100 15 01 101 16 01 110 17 01 111 20 10 000 21 10 001 22 10 010 23 10 011 24 10 100 25 10 101 26 10 110 27 10 111 30 11 000 31 11 001 32 11 010 33 11 011 34 11 100 35 11 101 36 11 110 37 11 111 Repare agora: Os números binários começam sempre; Na primeira coluna, por 00 0 em decimal Na segunda coluna, por 01 1 em decimal Na terceira coluna, por 10 2 em decimal Na quarta coluna, por 11 3 em decimal Existe uma repetição na parte direita dos dígitos binários, em todas as colunas. Com um pouco de imaginação então você chegará a uma regra muito simples: para con- verter um número numa base potência de dois para a base 2, simplesmente escreva indi- vidualmente os dígitos do número na 2, com um número de casas igual à potência de dois! Ex.: Base 8 8 é 2 elevado a 3, então 4168 = vale quanto na base 2? Pode-se escrever assim: 4 escrito em binário com 3 casas 100 1 escrito em binário com 3 casas 001 6 escrito em binário com 3 casas 110 ou seja 4168 = 1000011102 Para não nos enganarmos, é interessante escrever a tabelinha completa de conversão da base, por exemplo, na base 8, seria assim: Organização de Computadores Antônio Borges / Gabriel P. Silva Atualizado em 28/5/2004 17:38 0 000 1 001 2 010 3 011 4 100 5 101 6 110 7 111 Ex.: escrever o número 3CF116 na base 2. Antes de mais nada, para não nos enganarmos, vamos escrever a tabelinha de conta- gem da base 16. 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111 8 1000 9 1001 A 1010 B 1011 C 1100 D 1101 E 1110 F 1111 Organização de Computadores Antônio Borges / Gabriel P. Silva Agora converta automaticamente: 3CF116 = 0001 1100 FFFF 0001 Nota: deixei estes espaços em branco no meio do número binário que teria na verdade 16 dígitos coladinhos, só para ficar mais fácil a leitura, e para você conseguir perceber claramente que usei os números da tabela. Uma dica para decorar a tabelinha da base 16: Decore apenas a tabelinha de conversão binária da base 8. Para escrever a tabelinha da base 16, escreva esta tabelinha binária duas vezes em duas colunas, como mostrado aqui, colocando um dígito zero antes dos números binários da primeira coluna e o dígito 1 na segunda coluna. d) conversão genérica entre quaisquer bases Para converter entre uma base B1 e outra base B2 genéricas, a técnica mais usada é a seguinte: faça em dois passos. - Converta o número na base B1 para a base 10; - Depois converta este novo número na base 10 para a base B2. Exemplo: Converter 3178 para a base 5. Primeiro converta 3178 para a base 10 3178 = 3 x 82 + 1 x 81 + 8 x 80 = 20710 Agora converta 20710 para a base 5 207 ÷ 5 = 41 resto 2 41 ÷ 5 = 8 resto 1 8 ÷ 5 = 1 resto 3 1 ÷ 5 = 0 resto 1 então: 3178 = 20710 = 13125