Sistemas de Numeração
Se você gosta de eletrônica digital, programação de computadores ou de dispositivos embarcados, tais como microcontroladores ou CLP's, e tem vontade de iniciar um estudo nessa área mas não sabe por onde começar, então um bom ponto de partida são os sistemas de numeração. Sem um conhecimento sobre como funcionam os sistemas de numeração você terá dificuldade para entender os conceitos mais básicos de eletrônica digital, como por exemplo o funcionamento de funções lógicas e não terá qualquer possibilidade de compreender como operam as unidades lógico aritméticas das CPU's de microprocessadores e microcontroladores. Além disso, toda e qualquer atividade de programação, seja de computadores ou microcontroladores, faz uso intensivo de técnicas que só podem ser aplicadas a partir do domínio dos sistemas de numeração. Como você deve saber, o sistema de numeração que usamos em nosso dia a dia é o decimal, ou de base dez, e dispõe de dez algarismos — 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Mas em programação e lógica digital faz-se uso de outros sistemas, como o binário e hexadecimal, base dois porque dispõe de dois algarismos — 0 e 1 — e base dezesseis com dezesseis algarismos — 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F —, respectivamente. Mas seja qual for o sistema que se use, sempre vale a regra de formação de números, denominada posicional.Qual a vantagem de se usar outros sistemas?
Circuitos digitais funcionam à base de dois estados lógicos. Esses estados são referidos como alto/baixo, ligado/desligado, high/low, 1/0, enfim, dependendo do contexto você vai encontrar uma ou outra denominação. Mas o que importa mesmo é ter em mente que são dois estados opostos. Em termos elétricos, isso significa que um circuito digital opera em dois níveis de tensão, digamos 5V e 0V, ou 5V e -5V, só para exemplificar. E sendo assim, um sistema de numeração que contenha apenas dois dígitos cai como uma luva nesse cenário, já que podemos fazer uma correspondência direta entre cada dígito e um dos estados do circuito. Por exemplo, podemos associar o dígito 0 ao estado baixo e o dígito 1 ao estado alto. Ou o inverso, sem problemas. O que importa mesmo é que o sistema binário é perfeito para essa tarefa justamente por conter apenas dois dígitos. Mas, onde é que o sistema hexadecimal entra nessa história?Se você já lidou com quantidades expressas em notação binária sabe o qual desagradável pode ser. Sequências enormes de zeros e uns podem ser mamão com açúcar para uma máquina mas não são fáceis de digerir por humanos, pelo menos pelos "normais". É que quanto menor o número de algarismos de uma base, maior a quantidade de dígitos necessários para representar uma determinada quantidade. Por exemplo, 2014 representado em binário fica:
`2014_10=11111011110_2`
Os índices inferiores indicam as bases em que os números estão expressos.Bem, se base com poucos dígitos implicam em representações extensas, então deve ser razoável imaginar que bases com muitos dígitos possam representar as mesmas quantidades de forma compacta. Exatamente! E essa é a razão da importância da base hexadecimal. Por conter dezesseis dígitos ela permite uma notação muito compactada até para números grandes. Veja:
`2014_10=11111011110_2=7DE_16`
Como vemos, apenas três dígitos foram suficientes, contra quatro na base dez e onze na base dois. Portanto, o sistema binário é perfeito para as máquinas, mas o hexadecimal é conveniente para nós. Na prática, usamos ambos, conforme o contexto. Nesse ponto é importante salientar que, na verdade, máquinas não sabem nada a respeito de sistemas de numeração. Toda e qualquer informação fornecida à uma máquina é convertida na linguagem específica da máquina em questão por programas especiais, denominados compiladores, assemblers etc. Mas isso fica pra uma outra postagem.Contar é fácil?
Depende. Se entendemos como funciona o sistema de numeração posicional, contar é fácil até mesmo em outros sistemas, como o binário e o hexadecimal. Imaginemos a seguinte situação: alguém lhe pede para contar a quantidade de maçãs numa cesta. Você começa, retirando as maçãs e contando no sistema a que está habituado, o decimal:— 1, 2, 3, 4, ..., 8, 9, 10. Dez maçãs!
Pergunto: porque após o nove, último dígito da base dez, seguiu-se um e zero juntos? Perguntando de outra forma, porque não 11 ? Porque não 12? Essa pergunta pode parecer estranha devido ao fato de que você se acostumou a contar dessa maneira desde cedo. Mas já se perguntou isso? Há alguma regra que determine o que vem depois do último algarismo da base, quando a contagem não pode prosseguir por terem sidos todos usados? A resposta é sim, há uma regra e essa regra vale para todo e qualquer sistema de numeração, tenha ele a quantidade de algarismos que tiver. Depois que você a tiver aprendido e se tornar consciente da maneira pela qual formamos os números, quer dizer, da regra de formação, poderá contar em qualquer base, binária, octal, hexadecimal ou qualquer outra.
A regra é a seguinte: esgotados os algarismos da base no processo de contagem, volta-se ao primeiro algarismo e acrescenta-se uma unidade à ordem (ou posição, daí o nome posicional) imediatamente superior, que fica à esquerda. Agora fica claro o porquê de 10 e não 11 ou 12. Uma vez atingido o nove no processo de contagem, volta-se ao início da base, 0, e acrescenta-se uma unidade à ordem superior, que até esse momento não tinha algarismo algum. A partir daí o processo de contagem continua, quer dizer, a ordem mais baixa é acrescida de uma unidade a cada avanço na contagem até atingir nove. No próximo incremento, retorna a zero novamente e uma unidade é acrescida à ordem seguinte, que agora contém dois, formando 20. E assim indefinidamente...
A decomposição de um número de acordo com a notação posicional
No sistema de notação posicional, cada ordem ou posição tem seu valor ponderado à uma potência da base, segundo a ordem que ocupa. Para sabermos que quantidade representa um determinado número basta decompormos o número levando em conta a ordem de cada algarismo. Por exemplo, o número 26 pode ser decomposto assim:`(2*10^1)+(6*10^0)=(2*10)+(6*1)=20+6=26`
Já o número 2654 fica assim:`(2*10^3)+(6*10^2)+(5*10^1)+(4*10^0)=2000+600+50+4=2654`
Observe atentamente cada parênteses. Veja que temos um par de parênteses para cada dígito do número — um par para cada ordem — e que cada dígito multiplica a potência de dez que corresponde àquela ordem. Note também que a potência de dez da primeira ordem é zero e não um. Aliás, praticamente tudo em computação começa em zero.Na próxima postagem dessa série vamos ver como isso funciona na base dois e algumas coisas mais. Até lá!