|
|
||||
A Lógica é uma ciência cujos princípios fundamentais constituem a base da Matemática. Apenas este fato já seria por demais relevante e a colocaria em uma posição privilegiada de destaque do pensamento humano. No entanto, a Lógica tem outras aplicações de extrema importância na vida moderna: ela também é fundamental para a Computação e é nela que se justifica toda a "inteligência" dos atuais computadores. Neste artigo, tentaremos mostrar como as operações aritméticas de adição, subtração, multiplicação e divisão são efetuadas pelos computadores através de operações lógicas (e), (ou) e (não).
O sistema numérico utilizado internamente pelos computadores é o sistema de base 2, também conhecido como sistema binário. Trata-se de um sistema de representação de números no qual são usados apenas os algarismos 0 e 1, denominados bits - uma contração de BInary digiTS. Neste sistema, o zero é representado como 0, o um como 1, o dois como 10, o três como 11, o quatro como 100, o cinco como 101, o seis como 110, etc. Dessa forma, cada número tem uma representação única na forma binária. Se for fornecida a representação binária de um número, então, para determinarmos a representação decimal correspondente, basta associarmos a cada bit 1 do número uma potência de 2 cujo expoente é dado pela quantidade de bits que estão à direita do respectivo 1 e somarmos todas as potências. Por exemplo, 10000, em binário, corresponde a 24 = 16 no sistema de numeração decimal usual; 100100, em binário, corresponde a 25 + 22 = 36 em decimal; 1101001, em binário, corresponde em decimal a 26 + 25 + 23 + 20 = 105. O leitor poderá encontrar mais informações sobre os sistemas de numeração em livros do 1.° grau, em livros de Computação (como [3]) ou em livros de Aritmética (como [4]). Neste artigo, sempre que escrevermos um número usando apenas os algarismos 0 e 1, estaremos usando o sistema binário.
A adição de números binários é feita através do cálculo das somas 0 + 0, 0 + 1, 1 + 0 e 1+1 repetidas vezes. É semelhante à adição decimal usual, lembrando que o fato 1 + 1 = 2 se escreve em binário como 1 + 1 = 10, ou seja, 1 + 1 é igual a 0 e vai 1 (para ser adicionado à próxima coluna). Assim, os fatos relevantes da adição em binário resumem-se na seguinte tabela
Exemplo: 11001 + 10101 = 101110 Como pode, então, a eletricidade ter "aprendido" estes quatro fatos básicos a respeito da adição de binários? Uma solução clássica usa três circuitos conhecidos como circuitos OR (ou), AND (e) e NOT (não) desenhados na próxima página. Em cada um dos casos, a fonte de potência está tentando enviar corrente para os contatos de saída indicados. No caso do circuito OR, isto pode ser feito através do fechamento de uma ou duas chaves. Uma chave é fechada pelo acionamento de um contato magnético (mostrado como um indutor) e isto é feito tornando-se o contato de entrada eletricamente ativo.
Apenas quando ambas as entradas estiverem
eletricamente desativadas é que o fluxo de eletricidade irá parar. Usando-se 0
para indicar contato desativado e 1 para indicar contato eletricamente ativo,
temos que a função do circuito OR pode ser resumida na seguinte tabela:
Para o circuito AND, o fluxo de corrente somente existirá se ambas as chaves estiverem fechadas, e isto requer que as entradas A e B estejam eletricamente ativas simultaneamente. Sua função pode ser resumida na seguinte tabela:
No circuito NOT, quando a entrada está eletricamente ativa, a saída está desativada e vice-versa. Sua função pode ser resumida por entrada 0 1 saída (NOT) 1 0 As três tabelas anteriores dos circuitos OR, AND e NOT são equivalentes, respectivamente, às tabelas-verdade das operações lógicas , e , bastando para isso pensarmos no 1 como sendo verdadeiro e no 0 como sendo falso. Vamos agora mostrar como a adição reduz-se a um cálculo de expressões lógicas. Aliás, todas as operações realizadas com computadores reduzem-se sempre a combinações de operações lógicas. Consideremos a combinação de circuitos AND, OR e NOT, ao lado, que calcula a soma de dois dígitos binários (bits). Assinalamos, como exemplo, o que acontece com a entrada (1,1). Observe que, neste caso, temos o bit da soma (resultado) igual a 0 e o vai-um como sendo 1, significando que 1+1=10. Usando a notação das tabelas-verdade, temos que essa combinação de circuitos poderia ser descrita como Resultado = (~ (x y) A (x y)) Vai-um = x y onde x e y estão associados às entradas do circuito. Podemos aplicar as leis da Lógica para operar ou modificar esse tipo de circuito. Por exemplo, o resultado anterior também é igual a (~ x ~ y) (x y).
Para descrevermos os algoritmos das outras operações aritméticas, precisamos de duas operações além da adição: as operações de inversão e de deslocamento de bits. A inversão de bits, também chamada complementação de dois, é a operação que consiste na troca de todos os bits 0 por 1 e vice-versa. Por exemplo, invertendo-se os bits de 110101, obtemos 001010.
A operação de deslocamento de bits (para a esquerda) consiste no acréscimo de bits 0 no final do número binário. Numericamente, isto corresponde a uma multiplicação por uma potência de 2. Deslocando-se os bits de 11011 uma casa para a esquerda, obtemos 110110; deslocando-se duas casas para a esquerda, obtemos 1101100 e assim por diante.
A subtração x y de dois números binários pode ser efetuada da seguinte forma: (1) Invertemos os bits do subtraendo y, obtendo, assim, outro número z. (2) Somamos o minuendo x com z. (3) Somamos 1 ao resultado x + z obtido em (2) e desprezamos o primeiro algarismo (contando da esquerda para a direita). O resultado obtido em (3) é igual a x y. Assim, a subtração se reduz a operações de adição e inversão de bits. Exemplo: Calcular 11011-10110.
Invertemos os bits de
10110 e obtemos 01001. Somando este resultado com 11011, obtemos 100100, o que
somado a 1 nos fornece 100101. Desprezando o algarismo que está mais à esquerda,
obtemos 00101, ou seja, 101. Portanto, 11011-10110 = 101, o que, no nosso
sistema decimal, significa 27
22 = 5.
A multiplicação de dois números binários reduz-se a somas cujas parcelas são formadas pelo multiplicando ou pelo multiplicando deslocado de alguns bits para a esquerda. A quantidade de bits a ser deslocada no multiplicando é definida pela posição de cada bit 1 do multiplicador. Usamos assim um algoritmo semelhante ao que se usa no sistema decimal.
Observe que não é
necessário saber nenhuma tabuada para se efetuar multiplicações no sistema
binário.
Algoritmos de divisão
são, de certo modo, mais difíceis de implementar do que algoritmos de
multiplicação ou subtração. No entanto, a divisão em binário pode ser reduzida a
sucessivas subtrações. (Aliás, no sistema decimal usual, toda divisão reduz-se a
subtrações. Por exemplo, dividir 19 por 5: 19
5 = 14, 14
5 = 9, 9
5 = 4 < 5. Logo,
o resto é 4 e o quociente é 3, porque foram efetuadas 3 subtrações.)
A operação de deslocamento de bits para a esquerda corresponde, no sistema decimal, à multiplicação por potências de 10, o que equivale ao acréscimo de zeros à direita do número. A operação de inversão de bits na base 10 equivale à complementação de 9 dos algarismos do número, ou seja, equivale à substituição de cada algarismo N por 9 N. A subtração usual, na base 10, pode ser feita também com essa operação de inversão de modo semelhante à subtração no sistema binário. Exemplo: Calcular 2001 - 1940. O complemento de 9 de 1940 é 8059, o que, somado a 2001, dá como resultado 10060. Somando 10060 com 1 e desprezando o primeiro algarismo, obtemos 61, que é a diferença procurada. Deixamos, como exercício, aos leitores mais curiosos, a demonstração do porquê do funcionamento deste algoritmo.
Referências Bibliográficas
[1] Barden Jr., W. Matemática para microcomputadores. Ed. Campus, 1985. [2] Scheid, F. Computadores e programação. Coleção Schaum, Ed. McGraw-Hill, 1984. [3] Gonick, L. introdução ilustrada à Computação (com muito humor). Ed.Harbra, 1984. [4] Fomin, S. Sistemas de numeração. Ed. Mir, 1984.
|