Sistemas de numeração utilizados na informática

Esteja você iniciando no mundo da informática ou já seja um profissional respeitado neste ramo, uma das primeiras informações que você ouve falar é que os computadores trabalham com números binários, popularmente chamados de 0 e de 1. A maioria das pessoas costuma dizer, simplesmente, que o 0 significa ausência de energia e o 1, presença de energia. Mas será que isso é realmente verdade? Neste artigo, vamos ir desmistificar este mito e ir um pouco além, explicando a construção matemática dos famosos números binários, algumas operações que podemos fazer com eles, onde eles são utilizados além dos micros, assim como outros sistemas de numeração muito presentes no meio computacional que, se você ainda não viu, certamente verá algum dia. Para isso, no entanto, será necessário introduzirmos alguns conceitos matemáticos para que possamos sustentar nossa argumentação. Assim, segure firme, pois nossa viagem vai começar!

Um, dois, muitos!

Os números Naturais são utilizados para resolver problemas de contagem e foram os primeiros a serem utilizados pela humanidade. Já no início da civilização, havia uma certa “correspondência binária” neste processo, pois as tribos primitivas costumavam contar as coisas como “um, dois e muitos”, ou seja, tudo conjunto ou coleção que tinha mais do que dois elementos era considerado como muitos ou infinito. Essa herança primitiva permanece até hoje: em francês, por exemplo, a palavra “muitos” se traduz como “très” e este radical está presente em vários idiomas modernos para representar tal número: no próprio francês, três é traduzido como trois, em inglês, three, em Italiano, tre e assim por diante. Com a evolução histórica, social e intelectual da humanidade, evoluiu também o conceito de infinito mas, embora seja matematicamente incorreto, é comum pessoas dizerem que uma quantidade enorme ou incontável é infinita.

Embora a matemática tenha um alto nível de exigência no tocante ao rigor das demonstrações lógicas, por muito tempo o conjunto N foi tido apenas como intuitivo e não demonstrável, tanto que o famoso matemático Leopold Kronecker (1823 – 1891) chegou a afirmar que Deus criou os números Naturais e o homem fez todo o resto. Foi apenas em 1889 que o matemático italiano Giuseppe Peano (1858 – 1932) conseguiu caracterizar os números Naturais de forma axiomática, através dos famosos Axiomas de Peano, Posteriormente, seguiram-se outras demonstrações mais complexas e rigorosas deste conjunto.

Para entendermos os sistemas de numeração, precisamos de dois conceitos importantes no conjunto N: divisibilidade e divisão euclidiana.

Divisibilidade em N

A divisibilidade é a versão multiplicativa da relação de ordem e é definida como: dados dois números naturais a e b, com b diferente de 0, dizemos que b divide a (ou, de forma recíproca, que a é um múltiplo de b) e anotamos b|a se e somente se existe um outro número natural c tal que a = b . c.

Por exemplo: 2|6 pois 6 = 3 . 2; 7|63 pois 63 = 7 . 9, mas 3 não divide 8, pois não existe nenhum número natural que multiplicado por três resulte em 8.

Percebamos, aqui, que o conceito de divisibilidade nada mais é do que achar uma solução para a equação bx = a . Por este motivo, tratamos deste assunto apenas no conjunto dos números Naturais e Inteiros, pois ela poderá ou não ter uma solução; em outros conjuntos, como Q, I ou R, sempre existirá algum x que satisfaça a equação. Se trouxéssemos o último exemplo para Q, teríamos que x=8/3. Notemos com isso, b é sempre menor ou igual a a.

O algorítimo de Euclides para a divisão

Euclides foi um famoso matemático grego que viveu em aproximadamente 300 a.C. Foi ele quem escreveu a obra Os Elementos, que definem os alicerces para a Geometria que vemos nos ensinos Fundamental e Médio e que também é utilizada em várias áreas, como engenharia, design e construção civil.

Fora da Geometria, Euclides descobriu um teorema o qual nos permite dividir qualquer número Natural por outro – e você certamente o conhece desde o início de sua vida escolar. Ele se baseia na ideia de divisibilidade a qual acabamos de ver e tem por objetivos responder a uma simples pergunta: Se a e b são números Naturais e b não divide a, qual será o múltiplo de b que mais se aproxima de a? A resposta a esta pergunta está em um teorema o qual afirma que, se a e b são números Naturais, então existem e são únicos os números Naturais q e r tais que a = q . b + r, sendo que r é menor do que b.

Chamamos a q de quociente e a r de resto. A condição de que o resto seja menor do que o divisor b nos garante que o quociente será único. Caso não fizéssemos essa restrição, a divisão de a por b poderia ter infinitos resultados.

Como vimos no exemplo anterior, 3 não divide 8. Assim, podemos utilizar o algorítimo da divisão euclidiana e concluir que 8 = 2 . 3 + 2, ou seja: 6, 3 . 2, é o múltiplo de 3 que mais se aproxima de 8. Nesta expressão, perceba que q = 2 e r = 2 e, ainda, que o valor de r é menor do que o divisor 3. Caso não considerássemos a condição r < b, também poderíamos escrever que 8 = 1 . 3 + 5 ou que 8 = 0 . 3 + 8 e, se considerássemos o conjunto dos números inteiros, Z, teríamos mais infinitas possibilidades. Desta forma, garantimos a unicidade do resultado ao considerar que o resto sempre deverá ser menor do que o divisor. Perceba, ainda, que se a for múltiplo de b, o resto será igual a 0 e a divisão será dita exata.

Sistemas de numeração

Agora que temos toda a base matemática de que precisamos, podemos tratar dos sistemas de numeração em si. Um sistema de numeração nada mais é do que um sistema onde um conjunto de números é representado por numerais de forma consistente.

Atualmente, nós utilizamos um sistema de numeração decimal, isto é, de base 10, que é dito posicional, ou seja, cada algarismo, além de seu valor, possui um peso dado através da posição que ocupa. Desta forma, embora os números 518 e 851 sejam compostos pelos mesmos algarismos, sabemos que eles representam quantidades diferentes.

A princípio, a base do sistema de numeração pode ser um número qualquer. Os babilônios antigos usavam um sistema de base 60 cujos vestígios encontramos ainda hoje na medição de ângulos e nos relógios, por exemplo. Quando a base do sistema é menor ou igual a 10, utilizamos os algarismos indo arábicos para representar os numerais; quando é maior, devemos utilizar outros símbolos, geralmente letras do alfabeto latino.

Graças a um teorema matemático, sabemos que cada número Natural possui uma representação única em uma base qualquer. Este teorema pode ser enunciado como: “Seja b um número Natural com b ? 2. Então, para todo a Natural diferente de 0, existem e são únicos números Naturais c0, c1, c2, , cn tais que a = cnbn+ cn-1bn-1+ … + c1b + c0 para os índices de c menores do que b e o último diferente de 0“.

Esta expressão, acima, chama-se de “expansão de a na base b” e também pode ser descrita como a = (cncn-1...c1c0)b.

Com isso, a expansão do número 524 na base decimal é 5 . 102+ 2 . 10 + 4. Perceba que o número que multiplica cada algarismo é a base numérica elevada a um expoente que corresponde à posição do numeral menos 1 e o último algarismo está, na verdade, sendo multiplicado pela base elevada a 0.

Convertendo de uma base qualquer para a base 10

Com o que vimos anteriormente, para convertermos um número que está em uma base qualquer para a base decimal simplesmente devemos escrever e calcular a expansão deste número na base dada.

Por exemplo, vamos calcular quanto vale (52024)7 na base 10:

(52024)7= 5. 74+ 2 . 73+ 0 . 72+ 2 . 7 + 4 = (12709)10

Portanto, a representação de 52024 na base 7 é 12709 na base 10.

Convertendo da base 10 para uma base qualquer

Para convertermos um número que esteja na base decimal para outra base b, devemos encontrar uma expressão da forma a = cnbn+ cn-1bn-1+ … + c1b + c0 para o mesmo.

Como exemplo, vamos escrever o número 139 na base 3. Para isso, precisamos encontrar para ele uma expressão do tipo 139 = an 3n+ an-13n-1+ … + a13+ a0.

Ao utilizarmos a propriedade distributiva da multiplicação, temos que

139 = 3 . (an 3n-1+ ...+ a1) + a0

Desta forma, concluímos que a0 é, na verdade, o resto da divisão de 139 por 3. Se realizarmos tal divisão, teremos que 139 = 46 . 3 + 1, ou seja, a0 é igual a 1. Com isso, 46 . 3 = 139 - 1. Mas nós sabemos que 139 = 3 . (an 3n-1+ ...+ a1) + a0= 3 . (an 3n-1+ ...+ a1) + 1 . Temos, então, que 139 = 3 . (an 3n-1+ ...+ a1) , ou seja, eliminamos o termo independente. Vamos repetir essa operação até eliminarmos todos os a‘s e, então, teremos que:

139 = 46 . 3 + 1

46 = 15 . 3 + 1

15 = 5 . 3 + 0

5 = 1 . 3 + 2

Agora, vamos fazer uma série de substituições:

139 = 46 . 3 + 1 = (15 . 3 + 1) . 3 + 1 = 15 . 32 + 1 . 3 + 1 = 5 . 33 + 1 . 3 + 1 = (1 . 3 + 2) . 33 + 1 . 3 + 1 = 1 . 34 + 2 . 33 + 0 . 32 . 1 . 3 + 1

Assim, concluímos que a expansão de 139 na base 3 é (12011)3. Note quem apesar de esta ser a explicação matematicamente correta, muitos cursos técnicos preferem simplificar o processo simplesmente dizendo que, para converter um número na base decimal para outra base devemos realizar sucessivas divisões euclidianas do número pelo algarismo que representa a base até que o divisor seja igual a 0 e pegarmos os restos de baixo para cima. Este procedimento, muito mais simples, está correto e é justificado pelo exemplo anterior.

Sistemas de numeração utilizados na Informática

Os sistemas de numeração mais utilizados na informática são:

Base 2: também conhecido como sistema binário. É um sistema posicional composto pelos numerais 0 e 1 e, além da Informática, é utilizado na Eletrônica Digital na implementação de circuitos de portas lógicas. Uma de suas primeiras aplicações na informática surgiu quando da utilização de cartões perfurados para representar informações e programas.

Base 8: o sistema octal também é um sistema posicional e foi utilizado na Informática como alternativa ao sistema binário. É composto pelos numerais 0, 1, 2, 3, 4, 5, 6 e 7.

Base 16: o sistema hexadecimal é, talvez, um dos mais conhecidos da atualidade. É composto de 16 algarismos, representados por 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E e F. Trabalha-se com ele como qualquer outro sistema, mas deve-se prestar atenção ao valor dos caracteres alfabético na hora de fazer operações e conversões. É atualmente a maior alternativa ao sistema binário por ser extremamente compacto e é utilizado para representar portas, interrupções e endereços de memória, além de cores no desenvolvimento web, em substituição ao sistema RGB. Para representar as cores, é utilizada uma notação de seis dígitos, onde cada dupla, da esquerda para a direita, representa o valor da intensidade do vermelho, do verde e do azul, respectivamente, variando de 00 até FF, que representa o valor decimal 255. Assim, as cores variam de 000000, que representa o preto, até FFFFFF, que corresponde ao branco. Os tons de cinza são representados por valores iguais nas três posições, como por exemplo 666666, DEDEDE ou CCCCCC. Quanto mais próximo de FFFFFF, mais clara é a tonalidade de cinza. Ao todo, essa notação hexadecimal permite a representação de mais de 16 milhões e meio de cores. Alguns programas de desenho vetorial e de tratamento de imagem incluem, ainda, uma quarta dupla de valores na notação para representar o nível de transparência da cor selecionada. Graças à base hexadecimal, as rotinas de tratamento de imagem foram em muito facilitadas, Por exemplo: para fazer o efeito de negativo em uma foto, isto é, inverter suas cores, basta subtrair de FF cada valor da tripla que representa a cor de cada pixel.

Base 62: Talvez você nunca tenha ouvido falar deste sistema, mas acredite: você já o utilizou. O sistema de base 62 está se tornando cada vez mais popular porque seus 62 algarismos são representados pelos numerais de 0 a 9 e pelas letras de A a Z e de a a z. Uma de suas aplicações mais recorrentes está nos famosos encurtadores de URL: o código gerado pelo encurtador nada mais é do que a conversão de um número decimal – geralmente o número de identificação único para cada URL no banco de dados – nesta base. Assim, quanto mais caracteres um encurtador de URLs utilizar para gerar sua URL curta, mais URLs ele terá cadastradas.

Base 64: É um sistema numérico utilizado para codificação de dados binários que precisam ser armazenados e transferidos em meios que foram desenhados originalmente para lidar com dados textuais. É composto pelos algarismos de 0 a 9, pelas letras de A a Z e de a a z e pelos símbolos / e +. O caractere = é utilizado como sufixo especial.

O sistema de numeração Binário

Apesar das tentativas de utilizar-se outros sistemas de numeração mais compactos para substituir o sistema binário, é este que forma a “linguagem” dos computadores. Tudo, desde números, cores, palavras, textos e imagens é tratado pelo sistema operacional nesta base de numeração. No exemplo mais simples, se você fizer uma soma na calculadora de seu sistema operacional, ele irá converter os valores para sua representação base 2, realizará a operação e converterá, novamente, o resultado para a base decimal.

Para convertermos um número em base 2 para a base 10, basta fazermos o que já foi explicado, com a vantagem de que, como os algarismos são apenas 0 e 1, poderemos ter a oportunidade de cancelar várias potências.

Por exemplo: vamos converter o número binário 1010 para a base decimal. Escrevendo a expansão do número na base 2, temos:

1010 = 1 . 23 + 0. 22 + 1 . 2 + 0 = 23 + 2 = 8 + 2 = 10

Já o procedimento contrário pode ser feito pelo algoritmo explicado anteriormente ou, de maneira mais simples, pelo “truque” de realizar divisões sucessivas por 2 e pegar os restos de baixo para cima:

10 = 5 . 2 + 0

5 = 2 . 2 + 1

2 = 1 .2 + 0

1 = 0 . 2 + 1

Desta forma, 10 em base 2 se escreve como 1010.

Agora, o que devemos fazer se desejarmos converter um número que esteja na base 2 para a forma octal ou hexadecimal? Evidentemente, uma maneira seria converter o número em base 2 para a base 10 e fazer a outra conversão, mas isso demoraria muito tempo. Assim, utilizamos um dispositivo mais prático: como a base octal possui 23 dígitos, basta agruparmos os algarismos do número em base 2 em grupos de três, completando com zeros, caso necessário, e convertendo estes grupos para sua forma decimal. O mesmo procedimento pode ser utilizado para a base hexadecimal, com a diferença de que devemos agrupá-los em grupos de 4 e cuidar o valor correspondente às letras. Por exemplo, para convertermos 11101111 para a base octal, temos que separá-lo em grupos de três algarismos: 011 101 111. Agora, basta realizar a conversão e termos 3 5 7. 357 é a representação do número em base 8.

A adição de dois valores na base dois é realizada por transporte, da mesma forma do que a adição na base 10. Escrevemos os números um abaixo do outro e somamos por colunas da direita para a esquerda. Notemos que há quatro possibilidades:

0 + 0 = 0

0 + 1 = 1

1 + 0 = 1

1 + 1 = 10

Perceba que na última possibilidade, o resultado é maior do que a quantidade máxima de algarismos que podem ser armazenados em cada posição e, neste caso, há o transporte, ou popular “vai um”.

A subtração ocorre de forma análoga, apenas com a diferença de que:

0 - 0 = 0

0 - 1 = 1

1 - 0 = 1

1 - 1 = 0

No segundo caso, o resultado será 1, mas ocorrerá um transporte para a próxima coluna, que será acumulado no subtraendo.

Logo no começo de sua utilização na informática, surgiram algumas questões conceituais sobre o sistema binário. Uma das principais era a de como fazer um computador representar números negativos. Para tal, reservamos o bit mais significativo de um byte para o sinal, ou seja, o primeiro. Ele será 0 caso o número positivo e 1 caso negativo e usamos o complemento para 1 ou o complemento para 2. O primeiro consiste em simplesmente inverter zeros e uns: o que é zero vira um e vice-versa. O sinal é dado pelo bit mais significativo. Por exemplo: 3 em base 2 é 11. Representamos-lhe por 011. Para representarmos -3, simplesmente invertemos os bits e temos 100. Já no complemento para 2, invertemos os bits 0 e 1 e somamos 1 ao resultado. A vantagem de utilizar-se o complemento para dois é que ele possui um zero único e preserva as regras de adição e de subtração.

Outro ponto polêmico diz respeito à representação de números com vírgula. A questão apenas foi resolvida com o lançamento da norma IEEE 754, publicada originalmente em 1985 e revisada em 2008. A norma original dita que os números reais – conhecidos por números de ponto flutuante no meio informático – devem ser armazenados em sequências de 32 bits (a revisão de 2008 adicionou a representação de 64-bit para precisão dupla), onde o bit mais significativo é reservado ao sinal – 0 se positivo e 1 se negativo -; os oito bits seguintes são reservados ao expoente e os 23 bits restantes são reservados à parte fracionária. O expoente em questão corresponde a 127 mais o expoente de base 2 do número em questão.

O sistema binário e a eletrônica digital

Enquanto a eletrônica digital trabalha apenas com dois valores possíveis de amplitude, a analógica admite que a amplitude de um sinal pode assumir qualquer valor entre um mínimo e um máximo dados através do tempo. O valor 1 representa o valor mais alto de amplitude, logicamente assumido como verdadeiro e o 0, o mais baixo, correspondente ao lógico falso. É um grande equívoco, portanto, acreditar que o 0 representa a ausência completa de energia Complemente o 1 a presença de energia.

Os circuitos integrados digitais mais utilizados atualmente podem ser de dois tipos: TTL e CMOS. Os circuitos TTL (Transistor-Transistor Logic) são comercializadas em duas séries de modelos: aqueles que começam com 54 são destinados ao uso militar e os que começam com 74 à utilização comercial. Nesta família de circuitos lógicos, o sinal de entrada pode variar em uma amplitude que vai de 0V a 5V. Quando o sinal está entre 0V e 0,8V, o circuito o interpreta como sendo o nível mais baixo de amplitude, isto é, o 0 binário. Já quando o sinal recebido está entre 2V e 5V, este é interpretado como sendo o nível alto 1. As tensões entre 0,8V e 2V não são reconhecidas pelo circuito e deve-se, portanto, evitar seu uso em circuitos digitais. Já na família CMOS (Complementary Metal Oxid Semiconductor), tensões que estejam entre 0V e 1,5V são interpretadas como o baixo nível de energia, ou o Falso lógico. Já as tensões de 3,5V a 5V são reconhecidas como o nível alto ou 1. As tensões intermediárias não são reconhecidas. Assim, cai por terra o mito de que o 0 binário representa a ausência completa de energia: o zero, na verdade, representa o nível lógico correspondente ao falso. Isso não significa, necessariamente, que haja ausência de energia.

Portas lógicas são circuitos digitais que recebem uma ou mais tensões de entrada e devolvem apenas uma tensão de saída. Através da associação dessas portas, podemos construir circuitos capazes de realizar operações aritméticas simples, utilizando como base a álgebra booleana. Essas portas lógicas são constituídas por transistores que atuam como chaves ao receber um sinal elétrico, permitindo ou não sua passagem. Hoje, porém, existem circuitos integrados que já desempenham este papel. É desnecessário dizer que elas também estão presentes em processadores, em escala muito reduzida. As principais portas lógicas disponíveis hoje, com exemplos entre parêntesis, são:

  • NOT (TTL 7404) – também conhecida como inversora. Caso receba um nível lógico 1, devolverá 0 e caso receba um nível lógico 0, devolverá 1;

  • AND (TTL 7421 / CMOS 4081) – Possui duas entradas e uma saída. Retorna 1 apenas se receber o nível lógico 1 em ambas as entradas;

  • OR (TTL 7432 / CMOS 4075) – Também possui duas entradas e uma saída, mas devolve 1 se pelo menos uma das entradas informar o nível lógico 1.

  • NAND (TTL 7400 / CMOS 4011) – Equivale a uma porta AND seguida de uma porta NOT. Retorna 0 se receber o nível lógico 1 em ambas as entradas e 1 nos demais casos;

  • NOR (TTL 7402 / CMOS 4001) – Equivale à porta OR seguida de NOT. Retorna 1 apenas se as duas entradas informarem o nível lógico 0;

  • XOR (TTL 7486 / CMOS 4070) – A porta Ou Exclusivo retornará o nível lógico 1 se e somente se apenas uma das entradas for igual a 1 e a outra igual a 0.

Embora seja possível combinar livremente as portas lógicas, as empresas buscam economizar recursos quando de sua utilização em projetos eletrônicos calculando circuitos equivalentes, isto é, circuitos que produzirão o resultado esperado com um menor número de portas. Para isso, os engenheiros utilizam o Teorema de Morgan ou o Mapa de Karnaugh.

Conclusão

Os sistemas de numeração transcenderam o âmbito matemático e são utilizados de várias formas na Informática e na Eletrônica.

Por André Machado <andreferreiramachado [at]gmail.com>

http://www.andremachado.org

André F. Machado é graduando em Licenciatura em Matemática pela UFRGS.

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X