Escritos
B. Piropo
Anteriores:
< Trilha Zero >
Volte de onde veio
03/06/1991

< Com os Bits na Mão? >


Espalme sua mão direita em frente a você, como quem está fazendo um sinal de "pare". Lá estão eles: à direita, o dedo mindinho. Depois, seu vizinho, maior de todos, fura bolos e cata piolho. Não vou perguntar "cadê o queijo que estava aqui?". Essa já está muito manjada. Pergunto outra coisa. E responda depressa: começando de zero, e subindo de um em um, qual a maior quantidade que pode ser expressa com os cinco dedos que lá estão?

Cinco? Ora, meu amigo, um pouco mais de imaginação! Onze mil cento e onze? Não vale: como você faria para representar o onze mil cento e nove, por exemplo? Desde zero até lá, lembra?

Bem, mas a idéia do onze mil cento e onze não é má. Como ela funciona? Fácil: o mindinho vale um, seu vizinho dez, maior de todos cem, fura bolos mil e cata piolho dez mil. Some todos esses, e voilá. Cada dedo vale por sua posição na mão, a idéia básica dos sistemas numéricos posicionais. E o valor de cada posição é igual ao da anterior multiplicado por dez. Não tinha reparado? Pois o mindinho está na posição zero, e vale um. Seu vizinho, na posição um, vale 10 x 1 =10. Maior de todos, na posição dois, 10 x 10 = 100. E assim por diante. Esse é o sistema decimal, ou de "base dez". O problema é que com somente os cinco dedos eu não posso representar, por exemplo, doze, usando essa convenção.

E se eu fizer a mesma coisa, mas com uma convenção parecida? Como? Vejamos: um dedo levantado vale um. Abaixado, zero. E o valor de cada dedo passa a ser igual a dois multiplicado pelo do anterior. Vamos ver como é que fica: mindinho, um. Seu vizinho, 2 x 1= 2. Maior de todos, 2 x 2 = 4. Fura bolos: 2 x 4 = 8. E o cata piolho, lá no final, vai valer 16, como você já deve ter percebido.

Como é que se representa doze? Fácil: Levante o maior de todos e o fura bolos. Quanto valem? Maior de todos, quatro. Fura bolos, oito. Os outros, abaixados, valem zero. Soma: doze. Não disse que era fácil? E paz e amor para você também.

E desta forma, combinando dedos abaixados e levantados, podemos representar continuamente todos os inteiros, desde zero até o máximo de cinco dedos levantados. Que um micreiro esperto como você já descobriu que vale trinta e um, a resposta daquela pergunta lá de cima. Simpático, não? Pois acabamos de reinventar o sistema binário, ou sistema numérico de base dois. E um sistema, literalmente, digital.

Pois dígito vem do latim, e significa justamente dedo. O jeito mais natural de contar. E contando nos dedos só se pode usar números inteiros. Um dedo está levantado ou abaixado, vale um ou zero. A contagem dá "saltos" de um inteiro de cada vez, não se pode representar "meio dedo" - exceto de forma dolorosa e irreparável. Veja a diferença nos mostradores de relógios digitais e analógicos. Nestes, o movimento do ponteiro é contínuo, e pode estar em qualquer uma dentre as infinitas posições do mostrador. E é "analógico" porquê a hora é estimada por analogia com a posição do ponteiro em um dado momento, proporcionalmente ao seu deslocamento desde a origem. No digital, ele dá "saltos" de uma unidade. Ah, seu relógio digital marca centésimos de segundo, e centésimo não é unidade? Isso porquê você convencionou assim. Mas ele continua dando saltos de centésimo em centésimo. Ou de numeradores inteiros da fração que você escolher. Experimente fazê-lo marcar exatamente um terço de minuto. O analógico pode.

E o que tem isso a ver com micros? Elementar, meu caro Watson: a única forma que um micro pode usar para representar números é a digital. Pois, simplificadamente, uma posição de memória é um conjunto de pequenos capacitores que admitem dois estados: carregado e descarregado. Carregado, vale um. Descarregado, zero. E somente com isso se consegue todas aquelas maravilhas...

Cada um desses capacitores armazena um "bit" - que, além de ser a abreviação de "binary digit", ou dígito binário, também quer dizer "pedacinho", a menor quantidade de informação armazenada. E oito deles formam um byte, que corresponde exatamente a uma posição de memória. Por isso a memória de sua máquina é medida em Kbytes, ou quilobytes. E qual a maior quantidade inteira que "cabe" em um byte? Levante oito dedos e faça as contas: duzentos e cinquenta e cinco, certo? Que, se considerarmos também o zero, corresponde a um total de duzentas e cinquenta e seis possibilidades.

Com os oito bits de um byte podemos representar todos os inteiros de um até duzentos e cinquenta e cinco, e mais o zero. Por isso os caracteres da tabela ASCII estendida são duzentos e cinquenta e seis: todos podem ser representados em um único byte. Incidentalmente, ASCII pronuncia-se "aski", e não "A S C 2". É a sigla de American Standard Code for Information Interchange, código padrão americano para troca de informações.

Mas não pense que essa é a maior quantidade que pode ser representada dentro da sua máquina. Precisa de um número maior? Use mais de um byte. Qual a maior quantidade que se pode representar com dois bytes, ou dezesseis bits? Chame a namorada (ou o namorado, pra não dizer que sou machista), pois você vai precisar de dezesseis dedos. Levante-os, e repita o procedimento. Não dá para fazer tanta conta com a perturbadora presença ao lado? Pois vamos achar um jeito mais fácil, embora menos agradável. Se cada bit vale pela posição, cada byte também. O mesmo resultado pode ser obtido multiplicando os valores. E 256 x 256 = 65536, ou 64Kbytes. Outro valor muito comum. Tire um, correspondente ao zero, e fique com 65535, o maior número que pode ser representado com dois bytes.

Ah, pensava que 64Kbytes correspondia a sessenta e quatro mil bytes? Pois enganou-se. Lembre-se que o sistema decimal, a que você está tão acostumado, nada significa para a máquina. A coisa mais próxima de mil que se pode representar com um conjunto de bits todos "ligados" - ou setados, no jargão computerês - é obtida com dez bits e corresponde a 1023. Não esquecendo do zero, a quantidade de números assim representada é, portanto,1024, ou um kilobyte. Que multiplicado por sessenta e quatro, dá 65536, os 64K lá de cima. E pela mesma razão, um Megabyte não é um milhão de bytes, mas um pouco mais que isso. Corresponde a 1024 multiplicado por 1024. Faça as contas.

Ufa! Por hoje, chega de fazer contas. Mas prometo que tão cedo não vou lhe dar de novo essa canseira. Mas ela era indispensável. Senão, como é que poderíamos conversar na próxima semana sobre máquinas de oito ou dezesseis bits?

B. Piropo