DEV Community

Jefferson Oliveira
Jefferson Oliveira

Posted on • Originally published at jeffersonmourak.com on

Prazer, Binário.

Olá pessoas dessa internet, para quem está chegando aqui agora, este é o segundo artigo de uma série que estou fazendo para falar sobre os fundamentos da computação, recomendo ler o primeiro sobre portas lógicas. E para quem já leu o primeiro artigo, dá um pulinho lá porque eu fiz uma revisão no artigo, recomendo bastante dar uma olhada 😊

Vamos nos aprofundar um pouco mais e explorar alguns conceitos de matemática e também da história humana.

A matemática veio da necessidade de contar e medir da raça humana – quantos animais a Maria cuida, quantos dias até o próximo solstício… Com o tempo e a expansão humana, povos antigos criaram vários sistemas de numeração para o seu dia a dia. Jogos como Grand Theft Auto V, Call of Duty: Black Ops III, Dragon Quest XI são exemplos de uso do sistema numeral que os romanos usavam, e o I Ching, um antigo texto chinês, tem raízes em representações binárias.

Porém, não somente as antigas civilizações usavam outros sistemas numéricos. As horas de um dia são divididas entre 12 horas do período da manhã e 12 horas do período da tarde, ou uma dúzia de ovos. Na língua francesa ainda existem resquícios de um sistema com base vigesimal (20), por exemplo, o número 80 se diz quatre-vingts (quatro vintes), e um dos mais recentes é o Braille, que também tem raízes em representações binárias.

Nos dias atuais, utilizamos a representação decimal, e o motivo é bem simples: a média de dedos em mãos humanas são incríveis 10 dedos, sendo assim fica mais fácil contar usando somente as mãos.

☝️ + ☝️ = ✌️

Essa representação em base 10 é posicional, ou seja, a posição em que os dígitos são “desenhados” muda a quantidade que se está representando. 70 representa dez vezes mais que 07, daí vem o ditado popular “zero à esquerda”. Na escola, aprendemos as casas decimais – unidades, dezenas, centenas… Elas servem para representar qual é a posição desse dígito.

Dezena Unidade
7 0
0 7

E em cima dessa ordem existe uma fórmula matemática que converte um número de qualquer base para decimal. Para facilitar:

  • Dígito : Símbolo que representa uma quantidade única. Ex.: 1, 2, 3, 4, 5, 6, 7, 8, 9, 0
  • Número : Dígitos organizados em ordem de _ posição . _Ex.: 10, 144, 999, 42, 37, 0x8A6C, 0b101010
  • Base : Quantidade máxima de dígitos que pode ser representada. Ex.: binário (0b) 2, decimal 10, hexadecimal (0x)
  • Índice : A magnitude do dígito na posição. _Ex.: 10, o 1 em 10 tem Índice 1 e o 0 tem Índice 0 (é meio contraintuitivo, mas faz sentido). Em outras palavras, o índice é a posição da direita para a esquerda, começando em 0.

A fórmula é bem simples: (d)ígito × (b)ase(i)ndice. No exemplo que estamos fazendo, esta é a fórmula para converter 70 em decimal… para 70 em decimal. 7 × 101 + 0 × 100 = 70

Interactive binary counter widget (base 10, 3 digits) — view it on the blog.

Quando falamos de números dessa forma, fica mais fácil representar o binário, que nada mais é que a quantidade que pode ser representada pela fórmula _ d × 2i _.

Interactive binary counter widget (base 2, 6 digits) — view it on the blog.

E essa forma de representar quantidades também pode ser manipulada com operações matemáticas. A adição 25 + 17 é resolvida de modo parecido com isso.

1
2 5
1 7
--- +
4 2

Enter fullscreen mode Exit fullscreen mode

No exemplo acima, temos alguns elementos que precisam ser destacados:

  1. Um dígito só pode ser somado com outro dígito que estiver no mesmo índice.
  2. Quando a soma não puder ser representada com apenas um dígito, o menor índice é mantido como resultado, e o resto é enviado para o próximo índice.
  3. O resultado de uma soma será sempre a soma dos _ dígitos _ do _ índice _ + o _ resto _ que veio do _ dígito _ no _ índice _ anterior.

Com esses mesmos passos, podemos aplicar a soma em qualquer base.

    1 1 1 | 1 |  
1 0 0 0 1 1 | 2 5 | 1 9
0 0 0 1 1 1 | 1 7 | 1 1
------------ + | --- + | --- +
1 0 1 0 1 0 | 4 2 | 2 A 

Enter fullscreen mode Exit fullscreen mode

Cálculo de 25 + 17 em bases Binária, Decimal e Hexadecimal
Cálculo de 25 + 17 em bases Binária, Decimal e Hexadecimal

Interactive binary counter widget (base 2, 6 digits) — view it on the blog.

Agora que já nos conhecemos, como podemos fazer para o computador nos conhecer também?

Brincando de tradução

Lembrando do artigo anterior, vamos isolar a soma de dois dígitos em tabelas. A primeira, vamos olhar para o resultado apenas. Temos esta tabela que se assemelha muito com a tabela da porta OR, exceto por essa pequena mudança no final.

| Resultado |
| ? | 0 | 1 |
| 0 | 0 | 1 |
| 1 | 1 | 0 |

| OR |
| ∨ | 0 | 1 |
| 0 | 0 | 1 |
| 1 | 1 | 1 |

Para isso, podemos combinar o resultado das portas que já vimos anteriormente em um só circuito chamado “OU Exclusivo” ou “XOR”.

Interactive circ widget — view it on the blog.

╭───╮ ╭─────────────╮ ╭───╮ ╭───╮
│ a ├○●●─▶┤ │╭───▶┤ │ ╭──▶┤LED│
╰───╯ ││ │[nand:_nand_]├○╮ │AND├○╯ ╰───╯
      │●─▶┤ ││╰──▶┤ │          
      ││ ╰─────────────╯│ ╰───╯          
      ││ │                   
╭───╮ ││ ╭─────────╮ │                   
│ b ├○●╰─▶┤ │ │                   
╰───╯ │ │[or:_or_]├○───╯                   
      ╰──▶┤ │                        
          ╰─────────╯                        
Enter fullscreen mode Exit fullscreen mode

Agora, vamos olhar também para a tabela do resto da nossa soma e se percebe que é uma cópia exata da porta AND.

| Resto |
| ? | 0 | 1 |
| 0 | 0 | 0 |
| 1 | 0 | 1 |

| AND |
| ∧ | 0 | 1 |
| 0 | 0 | 0 |
| 1 | 0 | 1 |

E assim como o Capitão Planeta, “Pela união dos seus poderes”, nós vamos conseguir fazer a operação de soma de dois dígitos em binário, e esse componente é chamado de “Somador” ou “Adder”.

Interactive circ widget — view it on the blog.

╭───╮ ╭───╮ ╭───╮ ╭─────────╮ ╭───╮
│ a ├○●●────▶┤ │ ╭──▶┤ │ ╭────────────▶┤ │ ╭──▶┤LED│
╰───╯ ││ │AND├○╮ │ │AND├○╯ │[or:_or_]├○╯ ╰───╯
      │●────▶┤ │ │ │ ╭▶┤ │ ╭▶┤ │          
      ││ ╰───╯ │ │ │ ╰───╯ │ ╰─────────╯          
      ││ ╰─────────┼─┼───────────────────╯                      
╭───╮ ││ ╭─────────────╮ │ │ ╭─────────────╮ ╭───╮
│ b ├○●╰────▶┤ │ ●─┼▶┤ │ ╭──────────────────▶┤LED│
╰───╯ │ │[xor:_xor_1_]├○● │ │[xor:_xor_2_]├○╯ ╰───╯
      ╰─────▶┤ │ ●▶┤ │                          
             ╰─────────────╯ │ ╰─────────────╯                          
                               │                                          
╭──────╮ │                                          
│ c_in ├○──────────────────────●                                          
╰──────╯                                                                  
Enter fullscreen mode Exit fullscreen mode

Com essa combinação de portas lógicas, um computador já consegue fazer as incríveis somas de: 0 + 0, 1 + 0, 0 + 1, 1 + 1, mas, além disso, ele consegue também dizer quanto que houve de resto da soma. E quando combinados vários ADDERs, a gente consegue fazer uma soma de números mais complexos como o 42, mas essa nós vamos ver no próximo artigo.

Por hoje é só isso, pessoal.

Isso é tudo pessoal!
Isso é tudo pessoal!

Referências

Top comments (0)