Escovando bits: binário e operadores lógicos
Introdução
Uma das coisas mais incríveis que eu acho da computação é justamente a simplicidade que algumas operações complexas escondem.
Tudo que existe relacionado a computadores hoje em dia, são nada mais nada menos, que somas. Pense em qualquer coisa que você possa pensar que um computador pode fazer. Desde transações bancárias, até a curtida numa rede social, até a postagem nesse blog. Tudo isso é feito apenas com somas. Obviamente, uma grande quantidade delas, mas ainda sim, somas simples entre dois números.
Pensar nisso não parece tão absurdo quando lembramos que computadores são, na realidade, calculadoras muito avançandas, que conseguem realizar diversos cálculos mediante instruções previamente estabelecidas. Uma calculadora simples, não pode, por exemplo, executar programas. Um computador sim. Essa é a diferença crucial entre um e outro. Existem mais alguma coisas, mas não vou me ater nisso agora.
Matemática booleana
Que todas essas operações são resultados diretos de somas, nós já entendemos. Mas, que tipo de soma estamos falando? Bom, um computador, diferente de um ser humano, só aceita dois tipos de números como valores válidos: 0 e 1. É o famoso código binário. Ele, o computador, não sabe me dizer o que é um número 5, por exemplo, mas ele sabe muito bem o que é 0101. Inclusive, você saberia me dizer? Qual a diferença entre o número 101 e 101 (binário)? É o que na matemática chamamos de base. Um está na base decimal (ou base dez), que é contada de 0 até 9. O outro está na base binária, que é contada com 0 e 1. Para simplificar o entendimento e deixar todo mundo na mesma linha, quando eu estiver falando de binário, vou colocar o texto numa formatação diferente. Vai ficar mais fácil.
Operadores lógicos
Ok, já entendemos com o que um computador pensa: números binários. Mas como podemos fazer contas com isso? Na realidade, o processo é bem simples. Assim como na matemática “convencional” nós temos as operações de adição, subtração, multiplicação, divisão etc., no matemática binária (chamada formalmente de lógica booleana) nós temos as operações:
- E;
- OU;
- OU EXCLUSIVO (XOR);
- NÃO.
Existem outras, mas vamos focar nessas por enquanto.
Operador “E”
Imagine que você precisa me dizer duas condições e elas precisam ser verdadeiras para alguma outra coisa acontecer. Exemplo: se eu estiver com fome E tiver dinheiro na conta, então peço um iFood. Nesse exemplo, para eu pedir um iFood, eu tenho que ter duas condições verdadeiras (estar com fome e tiver dinheiro na conta). Assim funciona o operador E. Eu preciso que duas coisas sejam verdade para que a terceira também seja verdade. Considerando que 0 é falso e 1 é verdadeiro, podemos montar a seguinte tabela:
| 1ª condição | 2ª condição | Resultado |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
Perceba que o resultado só é 1 quando as duas condições forem 1 também.
Operador “OU”
Ao contrário do operador “E”, o operador “OU” funciona caso uma das condições seja verdade. Ela não precisa que as duas sejam verdade, apenas uma basta. Exemplo: Se eu tiver um gato OU tiver um cachorro, então vou dar muito carinho. Perceba que não importa qual das duas condições são verdadeiras, independentemente se for um gato ou um cachorro, eu vou dar muito carinho. Só não vou dar carinho se eu não tiver nem gato, nem cachorro. Montando a tabela semelhante, temos:
| 1ª condição | 2ª condição | Resultado |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
Novamente, podemos constatar que, nas seguintes condições, tendo apenas uma condição verdadeira, então o resultado será verdadeiro.
Operador “OU eXclusivo, XOR”
Aqui entramos num campo um pouco mais difícil de exemplificar no mundo real, mas juro que tentarei dar o meu melhor. Muito semelhante ao já visto “OU”, o “XOR” (conotação inglesa para eXclusive OR, ou “OU Exclusivo” em pt-BR), ele funciona da seguinte maneira: o resultado só será verdadeiro se as condições forem, estritamente, diferentes. Exemplo: Você foi num restaurante e o atendente falou que o combo que você pediu tem direito a uma sobremesa. Você pode escolher exclusivamente entre o sorvete ou a tortinha. Não dá para não escolher e você também não pode escolher os dois. Ou um é verdadeiro e o outro é falso, ou um é falto e o outro é verdadeiro. Se os dois forem falsos ou verdadeiros, então o resultado é falso. Vamos para a tabela:
| 1ª condição | 2ª condição | Resultado |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
Perceba que, ao contrário do “OU” normal, até quando os dois são verdadeiros, o resultado é falso.
Operador “NÃO”
Esse é o mais simples de todos. Basicamente, o que é verdadeiro vira falso e o que é falso, verdadeiro. Exemplo: Eu tenho um carro. Após aplicar o operador “NÃO”: Eu não tenho um carro. Na tabela:
| 1ª condição | Resultado |
|---|---|
| 0 | 1 |
| 1 | 0 |
Esse não precisa de tantas condições porque é literalmente só inverter a condição.
Conclusão
Nesse post vimos, de maneira bem resumida, como computadores “pensam”, como eles o fazem e como podemos brincar com os zeros e uns para montar pensamentos lógicos de decisão. Nos próximos tópicos, vamos conversar um pouco mais de como aplicar esses operadores para montar pequenas máquinas de somar (half-adder) e, em seguida uma máquina de somar completa (full-adder).