Pular para o conteúdo principal

Lógica binária

Já estabelecemos que binários são úteis para representar dados, mas computadores fazem bem mais que apenas armazená-los. Podemos ler, editar, criar, transformar, compartilhar e manipular dados. Computadores nos dão a capacidade de processar tudo isso por meio de componentes de hardware programados com sequências simples de instruções.

Acho interessante que, num primeiro momento, entendamos "instrução" no sentido menos computacional possível. Parece contra-intuitivo dado o contexto, mas é bem prudente pensar em instrução como aquela que um chefe passa ao seu funcionário sequências de tarefas bem definidas, como "some dois números" ou "verifique se esses dois valores são iguais".

O processador que implementa essas instruções é fundamentalmente baseado na lógica binária, um sistema para descrever afirmações lógicas onde variáveis podem ter um de dois valores: verdadeiro ou falso.

Fonte: How Computers Really Work, Capítulo "Binary in Action"

Quando li essa definição pela primeira vez, entendi bem, pois já sabia o que significam "instruções", "lógica binária" e "variáveis" na prática. Mas reconheço que, sem conhecer essas palavras-chave, a explicação pede mais elaboração. De forma um tanto ambiciosa, tentei então traçar uma sequência de verdades, onde cada etapa depende da anterior para fazer sentido:

  1. 1
    Computadores como processadores de dados

    Computadores não apenas armazenam, como também editam, calculam, criam, compartilham e manipulam dados.

  2. 2
    As tarefas do computador

    O computador possui componentes físicos previamente programados para executar tarefas simples usando binário.

  3. 3
    Instruções

    O computador executa essas tarefas por meio de instruções.

    Uma boa metáfora para ajudar a acompanhar o conteúdo:

    • O Sr. Programador é o chefe de um funcionário chamado Sr. Computador.
    • De forma um tanto cruel, esse chefe tóxico decide tatuar no pulso do Sr. Computador as tarefas que ele deve seguir à risca, coisas simples como comparar dados ou somá-los.
    • Com isso entendemos que uma instrução é uma tarefa que o computador está previamente programado para executar.
  4. 4
    O processador, processa (avá)

    O componente que é programado com essas instruções é o processador.

    • Parte desse conjunto de instruções se baseia em afirmações lógicas.
  5. 5
    Afirmações lógicas

    Afirmações lógicas são simplesmente frases que podem ser verdadeiras ou falsas. "2+2=42 + 2 = 4" é uma afirmação lógica verdadeira. "2+2=52 + 2 = 5" é uma afirmação lógica falsa. Não existe meio-termo, ou é uma coisa ou é outra.

    • Perceba que a frase só pode variar entre dois valores diferentes verdadeiro ou falso
    • Esse valor depende é claro, se o conteúdo da frase é verdade ou não.
  6. 6
    Variáveis

    Variáveis aqui são apenas espaços reservados para um valor.

    • Como na matemática quando x=2+2x = 2 + 2, percebe-se que xx é um espaço reservado para referenciar o resultado de 2+22 + 2.
    • A diferença é que numa variável de lógica binária, o único valor possível é verdadeiro ou falso, 1 ou 0.
  7. 7
    O sistema lógico

    O sistema em si é um conjunto de regras para operar sobre essas variáveis onde "se A é verdadeiro E B é verdadeiro, o resultado é verdadeiro".

    • Isso é uma operação lógica, e o processador executa exatamente esse tipo de coisa em altíssima velocidade.
    • Exemplos:
      • Afirmação A: a variável xx é par.
      • Afirmação B: a variável x=4x = 4.
      • Logo, esse conjunto de afirmações é verdadeiro.
      • Se testarmos neste mesmo programa x=5x = 5, o conjunto de afirmações passa a ser falso, pois contradiz a primeira afirmação de xx é par.
      • Se testarmos neste mesmo programa xx é impar, e mantivermos a afirmação de que a variável x=4x = 4, novamente se contradiz e o conjunto de afirmações passa a ser falso.
  8. 8
    Lógica binária

    Lógica binária é esse sistema feito de um conjunto de regras para operar sobre variáveis que só assumem dois estados, verdadeiro ou falso. O processador do computador é construído para executar essas operações, e faz isso bilhões de vezes por segundo. Cada decisão que um programa toma, no fundo, é uma cadeia dessas operações simples acontecendo em sequência.

Agora para. Leia quantas vezes forem necessárias tudo que está acima e contemple a frase que acabamos de destrinchar:

o processador do computador é fundamentalmente baseado na lógica binária, um sistema para descrever afirmações lógicas onde variáveis podem ter um de dois valores, verdadeiro ou falso

Se minha explicação foi suficiente, você acabou de entender uma frase que, há algumas páginas atrás, poderia muito bem estar escrita em sânscrito. Portanto sua satisfação intelectual, é merecida. Não se deixe enganar pelo rótulo de "fundamentos". Fundamento não significa fácil nem trivial. As bases levaram décadas para serem construídas por pessoas muito inteligentes que erraram muito antes de acertar. Você chegou ao mesmo entendimento em algumas páginas. Isso é, no mínimo, digno de uma pausa para o café.

Gostaria de pedir licença ao seu tempo livre para propor um exercício, onde sua missão é definir você mesmo a lógica binária em um parágrafo. Você deve conseguir descrever o que é, como se manifesta, onde está e qual sua utilidade para as operações realizadas no computador.

Seria covardia da minha parte dar um trabalho desses sem tentar primeiro, então aqui vai minha tentativa abaixo. Conto com sua decência de ver minha resposta apenas após ter feito a sua, mas em nada isso afeta sua integridade física, então fique à vontade caso o exercício ainda pareça desconfortável.

Resposta

O processador é o componente do computador capaz de executar instruções, tarefas simples como somar números ou comparar valores. Para isso, ele é construído sobre lógica binária, um sistema onde todas as operações se reduzem a afirmações verdadeiras ou falsas. Essas instruções são definidas pelo fabricante do processador e formam a base de tudo que um computador consegue fazer.

Felizmente o binário é perfeito para esse tipo de trabalho. O binário se encaixa naturalmente na lógica porque ambos operam com exatamente dois estados. Na matemática não existe meia verdade, e nos computadores não existe meio bit. Diante de um conjunto de fatos, a lógica nos permite determinar se uma afirmação é verdadeira ou falsa, e um único bit pode representar esse estado de verdadeiro (1) ou falso (0).

Vamos analisar alguns exemplos:

  • Dado que uma forma é formada por quatro linhas de mesmo tamanho
  • E dado que essa forma possui quatro ângulos retos
  • Concluo que é um quadrado

Esses exemplos possuem duas condições e ambas precisam ser verdadeiras para a conclusão ser verdadeira. Para esse tipo de situação, usamos o operador lógico AND ( E ) para unir as duas afirmações, em que, se qualquer uma das afirmações for falsa, logo a conclusão é falsa também. Veja a tabela abaixo, ela expressa as operações e resultado possíveis de uma operação AND.

quatro linhas iguaisOperadorquatro ângulos retosé um quadradoEm uma frase
VERDADEIROANDVERDADEIROVERDADEIROSe a forma possui quatro linhas iguais e possui quatro ângulos retos, é um quadrado
VERDADEIROANDFALSOFALSOSe a forma possui quatro linhas iguais e não possui quatro ângulos retos, não é um quadrado
FALSOANDVERDADEIROFALSOSe a forma não possui quatro linhas iguais e possui quatro ângulos retos, não é um quadrado
FALSOANDFALSOFALSOSe a forma não possui quatro linhas iguais e não possui quatro ângulos retos, não é um quadrado

Essa tabela é chamada de tabela verdade, uma tabela que mostra todas as possibilidades possíveis de condições (entradas) e suas conclusões lógicas (saídas). A tabela acima foi escrita para o nosso exemplo do quadrado em específico, mas o mesmo se aplica a quaisquer afirmações lógicas unidas com AND.

A tabela a seguir é vista com mais frequência pois ela representa os mesmos resultados lógicos porém de forma mais genérica. Observe as relações entre entradas A e B, unidas pelo operador AND:

Entrada AEntrada BSaída AND
VerdadeiroVerdadeiroVerdadeiro
VerdadeiroFalsoFalso
FalsoFalsoFalso
FalsoVerdadeiroFalso
Teste isso em python!

Se você sabe o básico de python, pode tentar fazer operações AND agora mesmo, veja alguns exemplos:

>>> True and True
True
>>> True and False
False
>>> False and True
False
>>> False and False
False

Como aqui falamos de computação, nada mais natural que puxarmos a sardinha para o nosso lado. A tabela a seguir tem a mesma ideia das duas anteriores, porém é a representação de como os computadores se relacionam com o operador AND:

Entrada AEntrada BSaída AND
111
100
000
010
Teste isso em python!

Ainda é possível fazer isso em python:

>>> 0b1 and 0b1
1
>>> 0b1 and 0b0
0
>>> 0b0 and 0b0
0
>>> 0b0 and 0b1
0

A tabela anterior é forma padrão de representar uma tabela verdade AND para sistemas digitais que usam o sistema binário de 00 e 11. Esse tipo de tabela é usado para expressar como os componentes vão se comportar quando receberem determinadas combinações de entrada. Entenda então que isso serve para qualquer tipo de operador, não apenas o AND.

Dito isso podemos avançar para outros operadores lógicos e declarações lógicas mais complexas usando essa tabela verdade como apoio. Vamos dizer que você trabalha em uma loja que dá desconto há dois tipos de clientes: crianças ou pessoas usando óculos de sol. Mais ninguém é elegível ao desconto. Se você quer estabelecer uma política da loja em uma expressão lógica você pode dizer o seguinte:

Se o cliente é uma criança

Ou se o cliente está usando óculos de sol

Então o cliente tem direito ao desconto

Temos então duas condições onde se qualquer uma delas for verdadeira, a conclusão torna-se verdadeira. Nessa situação usamos o operador lógico OR ("ou" em inglês) para unir as duas declarações. Podemos expressar isso em uma tabela verdade:

Entrada AEntrada BSaída OR
111
101
000
011

Observando a saída da tabela verdade OR, nota-se que o desconto não será dado apenas se ambas as entradas forem falsas ( 0 ), ou seja, se não for criança e nem estiver usando óculos.

Podemos ainda combinar o operador OR e AND para em declarações lógicas mais complexas. Para fins de exemplo, vamos considerar que eu vou para a praia sempre que eu estiver de férias e o clima estiver quente, ou então, quando é meu aniversário, podemos reescrever da seguinte forma:

Se eu estiver de férias e se o clima estiver quente

Ou se for meu aniversário

Então eu vou para praia

Podemos classificar essas entradas em condição A, B e C:

Condição A: Estou de férias

Condição B: Está quente

Condição C: é meu aniversário

Em uma expressão lógica pode se dizer que (A AND B) OR C, e assim como na matemática a parte entre parenteses, tem que ser resolvida primeiro. Podemos também colocar isso em uma tabela verdade:

Entrada AEntrada BEntrada CSaída AND/OR
0000
0011
0100
0111
1000
1011
1101
1111

Existem vários outros operadores lógicos bem comuns em sistemas digitais. O operador lógico NOT por exemplo é bem óbvio na verdade, sua saída será sempre o oposto do que recebeu como entrada, então um "NOT verdadeiro" gera um "falso".

Entrada ASaída NOT
10
01
dica

Como de costume, vim alertar sobre palavras em inglês. Peço que tente se acostumar com as mais triviais como o NOT citado acima, que vem sempre com o sentido de negação de algo.

Mas podem surgir outras como input, que significa uma entrada. Ou output que significa uma saída. E tente se lembrar delas e de seus significados ao ver suas abreviações como por in com frequência é usado para abreviar input. Algo como AinA_{in} por exemplo, poderia significar "entrada A".

De maneira semelhante output é abreviado para out e pode vir a representar que algo é uma saída como SoutS_{out}, poderia significar "saída S".

Esses detalhes que parecem bobos podem fazer a diferença conforme nos aprofundamos.

O operador NAND (NOT AND) é simplesmente o AND invertido. Sua saída é 0 apenas quando ambas as entradas são 1. Em todos os outros casos, a saída é 1, o oposto do AND.

ABOut
001
011
101
110

O operador NOR (NOT OR) é o OR invertido. A saída é 1 apenas quando ambas as entradas são 0, qualquer 1 na entrada já derruba a saída para 0.

ABOut
001
010
100
110

O XOR (ou exclusivo) é o mais interessante dos três. Sua saída é 1 quando as entradas são diferentes, e 0 quando são iguais. Em outras palavras, só produz 1 quando exatamente uma única entrada for 1.

ABOut
000
011
101
110

Com isso cobrimos os principais operadores lógicos. Agora fica a pergunta, onde essas operações acontecem fisicamente? Como um AND ou OR vira algo dentro de um computador? A resposta está nos circuitos digitais.