Arquivo da Categoria: Linguagem

146. Iotas binários

De 1 + 1 nem serem sempre 2, a base binária em que funcionam os computadores, valores e tamanhos diferentes de  números na base decimal e na base binária, converter texto em números com o código ASCII.

   A Matemática fornece as respostas corretas a um problema (ou mostra que não há soluções). Mas é muito dependente do contexto em que se procura a solução. A resposta a um problema num contexto pode ser outra noutro. Um dos enlatados de letras que as pessoas costumam abrir quando querem forçosamente ter razão é que, em Matemática, 1 + 1 = 2. Mas há contextos em que nisto não é verdade. Por exemplo, nos vulgares relógios, se num momento for 14 horas, passadas 6 horas serão 14 + 6 = 20 horas. Se for 17 horas, passadas 8 horas serão 17 + 8 = 25 horas. Como as 24 horas correspondem às 00 horas, 17 + 8 = 25 = 24 + 1 = 0 + 1 = 1 hora. Um relógio em que existissem apenas duas posições, o 0 e o 1, se num momento for 0 horas, passada 1 hora serão 0 + 1 = 1 hora. Mas se for 1 hora, passada 1 hora serão 1 + 1 = 2 horas. Mas não há 2 horas neste relógio. Serão assim 1 + 1 = 0 horas.

   A maioria das pessoas contam usando o que se chama base 10, fruto da configuração das mãos humanas (se bem que houve outras culturas que usavam outras bases). Houve a base 20, as bases 60 (que os Babilónios usavam e que deu origem ao nosso sistema horário) e outras referidas no artigo Dúzias de dedos, que explora a diversidade e métodos de numeração ao longo da História e do Mundo. Outro exemplo de uma base diferente é a base 2, usada pelos computadores. Quando se usa a base 10, conta-se de 0 a 9 e depois, como só há 10 dígitos, o número seguinte é 1 (para as dezenas) e 0 (para as unidades). Vai-se contando e somando às unidades até chegar a 19. A seguir, as dezenas são 2 e as unidades são 0 (20₂). Quando se usa a base 2, só há 2 dígitos, 0 e 1. Conta-se 0 , 1 e depois, como não há 2, o número seguinte é 1 (para as "dezenas") e 0 (para as "unidades"). Continua-se a contar e a somar às unidades. A seguir ao 10₂ (que é o 2 na base 10) há o 11₂ (que é 2 + 1 = 3 na base 10). Continua-se de somar às dezenas. Como 2 é 10₂ na base 2, obtém-se 100₂ (o 4 na base 10). A seguir é 101₂ (o 5 na base 10). Depois o 110₂ (o 6 na base 10). Depois é 111₂ (7 na base 10), 1000₂ (8 na base 10), 1001₂ (9 na base 10) e assim sucessivamente. Como os computadores usam a base 2 (que corresponde a 0 desligado e 1 ligado) eles “sabem” que 10 corresponde a 2 (para nós), limitam-se a transpor o 10 para 2 e assim para os computadores 1 + 1 = 10.

   Quem trabalha com computadores está habituado a ouvir falar de bytes. Houve-se falar de bytes quando se fala nas dimensões de um ficheiro no disco duro ou na memória RAM. Para se falar de bytes (lê-se «báites) é necessário compreender primeiro o que é um bit («bit» é a contracção da expressão inglesa BInary digiT ou seja «dígito binário»). Há bits, bytes, kilobytes, megabytes, gigabytes, terobytes,… Para compreender o que estes são, é preciso recordar o que significam estes prefixos.

    Um quilómetro é mil metros e o seu símbolo é km («k» para mil e «m» para metro). Um mililitro é um milésimo de litro e o seu símbolo é ml («m» para milésimo e «l» para litros). Sempre que se tem uma unidade de medida SI (sistema internacional de medida), a junção de uma letra como prefixo determina a dimensão que essa unidade de medida assume. As unidades SI são as medidas que internacionalmente se usam para evitar confusões como a questão de 90º em Celsius ser uma coisa e 90º Fahrenheit ser outra (ver o artigo Temperatura invertida sobre as diferenças entre celsius, fahrenheit e kelvin). Para uniformizar as medidas de quantidades foi criado o Sistema SI no qual o comprimento é medido em metros «m», a massa em quilogramas «kg», o tempo em segundos «s», a corrente eléctrica em ampéres «A», a temperatura em kelvins «K», a quantidade de substância em moles «mol» e a intensidade luminosa em candelas «cd». Todas as outras medidas são o resultado destas unidades básicas. A única unidade SI que é referida como múltiplo de outra é o kg. Por razões históricas, o grama era considerado a mais básica. No entanto, como o kg é hoje em dia mais usado, tornou-se este a unidade SI. Todas as outras unidades são unitárias. Por exemplo, a unidade da área é m2 ou a unidade da força é o Newton, que é m.kg/s2 (metro vezes quilómetro a dividir por segundo duas vezes).

   As outras unidades são mais usadas em termos quotidianos mas, como essas unidade podem variar de país para país, os trabalhos científicos são expressos por combinações das SI. Os múltiplos e os submúltiplos das unidades básicas estão também catalogados e nomeados. Os múltiplos e os submúltiplos são expressos em termos de potências de 10 (o número de vezes que se multiplica ou divide por 10). e.g. 103 é 1000 (10×10×10), 10-4 é 0,0001 (10/10/10/10). A lista de símbolos para os múltiplos e submúltiplos das unidades é a seguinte, na qual a diferença entre cada múltiplo é na ordem de 3 (quilo é mais 3 zeros, mega mais 3 do que quilo e assim sucessivamente). A partir do milhão as designações inglesa e portuguesa (e internacional também) é diferente, como já tinha sido referido no artigo Termos ordinais. Assim, um vírus pode ter 20 nanómetros de comprimento, 20×10-9 significando que tem 20 a dividir por 10 nove vezes. «nm» é o símbolo do nanómetro. É neste comprimento que surge uma ciência que está nos seus primórdios mas que promete vir a revolucionar o Mundo: a Nanotecnologia.
Mas um megabyte não é um milhão de bytes nem um gigabyte é mil milhões de bytes. O uso destes prefixos no domínio dos computadores é semelhante mas com uma crucial diferença. No quotidiano, usa-se como base o número 10 (a base decimal), provavelmente porque esse é o número de dedos que o ser humano tem nas mãos, ainda que os sumérios contassem até 12 com uma mão e até 60 com as duas, dando origem à divisão de uma hora em 60 minutos e um minuto em 60 segundos, como explorado no artigo Tempo decimal. Mas os computadores não funcionam com a base 10 mas funcionam com a base 2, a base binária, como já visto. Como log2 10 ≈ 3,321928094887362, isto significa que 10 ≈ 23,321928094887362. Assim, cada byte decimal corresponde a aproximadamente 3,321928094887362 bytes binários. Por exemplo, 99(10) tem 2 dígitos na base decimal e 2×3,321928094887362 bytes binários, que são 7 bytes binários (arredondando para o valor inteiro superior mais perto). De facto, 99(10) = 1100011(2).

   Um «giga»metro é um metro multiplicado por 10 nove vezes (109 metros) ou 1 000 000 000 metros. Mas um gigabyte não é 29 bytes (2 multiplicado por si mesmo 9 vezes). Se fosse, um gigabyte 2×2×2×2×2×2×2×2×2 = 512 bytes. Para que os dois valores se assemelhem em termos de bytes, um gigabyte é 230 = 1 073 741 824 (mil e setenta e três milhões setecentos e quarenta e um mil oitocentos e vinte e quatro bytes). Cada múltiplo do byte tem um valor semelhante ao múltiplo com o mesmo nome das unidade SI. Mas como o byte não é uma unidade SI não segue as mesmas regras. Neste caso, a diferença entre cada múltiplo é na ordem de 10 (quilomega mais 10 do que quilo, por exemplo).

   As contas com as base binária e a base decimal dão valores diferentes se bem que se possa passar de uma para a outra e obter-se os valores corretos nessa base. É assim que os computadores fazem as contas: primeiro transformam todos os números para ficarem na base binária que funciona de forma semelhante à base decimal. Nesta, escreve-se o número como uma série de algarismos entre 0 e 9 a multiplicar por potências de 10. Por exemplo, o número 105 = 100 + 5 = 1×102 + 5×100 (qualquer número elevado a 0 é 1, excepto o próprio 0. O valor de 00 depende do contexto). Assim, 105 = 10+ 101 + 100. Todas as potências têm de estar presentes. Se falta alguma, tem de se juntar a multiplicar por 0. O número na base decimal são os algarismos que estão a multiplicar pelas potências (1 0 5).

    Na base binária é a mesma coisa só que, em vez de 10, usa-se o 2. Na base binária, o número 1110(2) é 1×2+ 1×22 + 1×21 + 0×20 = 1×8 + 1×4 + 1×2 + 0×1 = 8 + 4 + 2 = 14(10). Para se saber que a primeira potência é 3, conta-se a partir da direita. A última é sempre 0 por isso, neste caso, a primeira é 3. A primeira é sempre o número de algarismos menos 1. Neste caso, há 4 algarismos, 1 0 2 0, logo a primeira potência é 23. O computador faz a conta 3 + 4 passando o 3 para a base binária. 3 = 2 + 1 = 1x21 + 1x20 = 11(2). Depois converte 4 para a base binária. Como 4 = 2×2 = 2e todas as potências da primeira até 0 têm de existir, 4 = 22 + 21+ 20 = 100(2). Depois faz a soma 11(2) + 100(2) = 111(2). Finalmente passa o resultado para a base decimal: 111(2) = 1×22 + 1×21 + 1×20 = 1×4 + 1×2 + 2×1 = 7(10).

   O número de cálculos que uma simples conta exige aumenta conforme quantos números se estão a somar, claro. Por cada número a mais é mais uma transformação para a base binária que se tem de fazer. Ao contrário dos seres humanos que têm 2 mãos com 10 dedos, para usar a base decimal os computadores não têm dedos nem mãos. O equivalente nos computadores aos dedos é um pequeno circuito que está ligado ou desligado. Quando está ligado corresponde a 1, quando está desligado corresponde a zero, como se fosse uma lâmpada. Um bit é uma «lâmpada», ou seja, a informação se o algarismo é 0 (desligado) ou 1 (ligado). Uma sequência de bits forma um byte.

    Neste exemplo concreto, está o byte 10100, que corresponde ao número 20. Mas um computador também lida com letras e outros símbolos. Quanto mais comprida for a cadeia de bits, maior é o número de bytes diferentes que o computador reconhece. A cada byte corresponde uma letra, um número ou um símbolo. Um sistema 8-bit significa que cada byte é composto de 8 bits. Desta forma, há 256 bytes diferentes, cada byte correspondendo a um carácter diferente. Este sistema 8-bit é o chamado código ASCII (American Standard Code for Information Interchange). Cada número de 0 a 256 corresponde a um símbolo. Cognosco é 67 111 103 110 111 115 99 111  no código ASCII.

   O computador trabalha e guarda esses dígitos na forma binária. A tabela ASCII tem também a base decimal para ser mais fácil de usar por nós mas os computadores transformam essa informação para a base binária. Assim, quando um computador está a guardar um documento de texto começa por transformar cada letra, cada espaço, cada pontuação, cada algarismo num número binário de acordo com a tabela ASCII. Guarda depois esses valores na forma de bytes na sua memória (no local da sua memória acende e apaga alguns bits para formar o texto inteiro). As letras maiúsculas têm um código ASCII diferente das minúsculas (ver no exemplo «C» e «c»), os espaços também, as vírgulas, o «enter»,… O tamanho do ficheiro é igual ao número de bytes que ocupa na memória do computador. Um disco que tivesse uma memória de 20 bytes conseguiria guardar 20 bytes ou seja 20 caracteres, um disco que tivesse uma memória de 2 megabytes conseguiria guardar 2 megabytes ou seja 1 048 576 caracteres.

   Os números 0 e 1 são os números mais poderosos à face da Terra. Apesar de normalmente negligenciados devido ao seu pouco valor numérico foram os algarismos que revolucionaram o Mundo através dos computadores!