Como já vimos atrás, os computadores estão limitados a dois estados: ON/OFF, Verdade/Falso, 1/0. Mas a explicação é simples! Um computador é essencialmente composto por circuitos lógicos que operam com operações boolianas como “E”, “OU”, “OU-Exclusivo” e negação. Como tal, as variáveis que temos são “Verdade” ou “Falso”, facilmente representadas por 1 ou 0, respectivamente. E, por isso, usa-se o sistema binário nos computadores.
Mas neste tópico iremos abordar as operações aritméticas em binário.
Soma em binário
Fazer contas com binários pode parecer estranho, mas na realidade não foge muito às regras “normais”. Vejamos, por exemplo, o caso da adição, comparando uma soma em decimal e uma soma em binário:
Considere-se a seguinte soma:
181 + 51
Se nos lembrarmos das contas da primária…
(1) | ||
1 | 8 | 1 |
+ | 5 | 1 |
2 | 3 | 2 |
Se puxarmos um pouco mais pela memória, lá vinham os passos 1 mais 1 são 2, 8 mais 5 são 13, 3 e vai 1, 1 mais 1 são 2… De notar o “e vai 1” pois iremos vê-lo novamente…
Considerem-se os valores equivalentes em binário e a soma (em binário):
1 0 1 1 0 1 0 1 (2) + 1 1 0 0 1 1 (2)
(1) | (1) | (1) | (1) | (1) | |||
1 | 0 | 1 | 1 | 0 | 1 | 0 | 1 |
+ | 1 | 1 | 0 | 0 | 1 | 1 | |
1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 |
Vejamos com atenção, passo a passo, desde o bit LSB (menos significativo ou de menor peso, que é o mais à direita) ao bit MSB (mais significativo ou de maior peso, que é o que está mais à esquerda):
-
1 mais 1 são “10”, 0 e vai 1
-
1 mais 0 mais 1 são “10”, 0 e vai 1
-
1 mais 1 mais 0 são “10”, 0 e vai 1
-
1 mais 0 mais 0 é 1
-
1 mais 1 são “10”, 0 e vai 1
-
1 mais 1 mais 1 são “11”, 1 e vai 1
-
1 mais 0 (mais 0) é 1
-
1
Repare-se nos resultado “1 + 1 = 10” e “1 + 1 + 1 = 11”… Estranho? Lembre-se que estamos a trabalhar com números binários e que “10” em binário é 2 em decimal e “11” em binário é 3 em decimal…
Aos 1’s colocados entre parêntesis também se costuma dar o nome de transporte. Na realidade, ao nível do processador, há um bit chamado de “bit de transporte” (carrier) que fica a 1 sempre que se verifica o caso do “e vai 1”.
Subtracção em binário
Quanto à subtracção, as coisas mantém-se semelhantes e usa-se também o método do “empréstimo” ou “troca”. Vejamos em decimal:
172 – 85
(1) | (1) | |
1 (0) | 7 (6) | 2 |
- | 8 | 5 |
0 | 8 | 7 |
Lembremo-nos que, no caso da subtracção, teremos “5 para 12 é 7 e empresta 1”, que depois subtraímos ao primeiro membro, daí seguir para “6 – 8 é 8 e empresta 1” e finalmente 1 menos 1, 0.
Vamos ver os mesmos valores, agora em binário:
1010 1100 – 101 0101
(1) | (1) | (1) | (1) | (1) | |||
1 (0) | 0 | 1 (0) | 0 | 1 (0) | 1 (0) | 0 (1) | 0 |
- | 1 | 0 | 1 | 0 | 1 | 0 | 1 |
0 | 1 | 0 | 1 | 0 | 1 | 1 | 1 |
Vejamos passo-a-passo, obviamente da direita para a esquerda:
-
0 – 1, empresta 1 → 10 – 1 = 1 (lembre-se que 10 (2) = 2 (10))
-
Subtrai o empréstimo de 1 ao 1º membro: 0 – 1, empresta também 1 e ficamos com 1 – 0 = 1
-
Subtrai o empréstimo de 1: 1 – 1 = 0, ficando 0 – 1, empresta 1 → 10 – 1 = 1
-
Subtrai mais um empréstimo de 1: 1 – 1 = 0, ficando 0 – 0 = 0
-
0 – 1, empresta 1 → 10 – 1 = 1
-
Subtrai o empréstimo de 1: 1 – 1 = 0, ficando 0 – 0 = 0
-
0 – 1, empresta 1 → 10 – 1 = 1
-
Subtrai o empréstimo de 1: 1 – 1 = 0, ficando 0 – 0 = 0
Ficamos com o número binário: 101 0111 que é 87 em decimal!
Multiplicação em binário
E multiplicar binários? Será complicar muito? Vejamos…
Seja o produto, em base 10 – decimal, de:
152 × 19
1 | 5 | 2 | ||
x | 1 | 9 | ||
1 | 3 | 6 | 8 | |
+ | 1 | 5 | 2 | |
2 | 8 | 8 | 8 |
Vejamos agora em binário…
1001 1000 × 1 0011
1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | |||||
x | 1 | 0 | 0 | 1 | 1 | |||||||
1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | |||||
1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | |||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |||||
+ | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | ||||
1 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 |
No caso foi ainda mais simples por haver muitos zeros. Mas, como se pode ver, a forma de efectuar a operação é extremamente fácil. E, de facto:
1011 0100 1000 (2) = 2888 (10)
Se, porém, a soma das colunas tornar-se mais complicada por haver vários “uns”, podem-se ir fazendo somas parciais. Por exemplo:
1 | 0 | 1 | 1 | 1 | 1 | ||||
x | 1 | 1 | 0 | 1 | |||||
1 | 0 | 1 | 1 | 1 | 1 | ||||
+ | 0 | 0 | 0 | 0 | 0 | 0 | |||
0 | 1 | 0 | 1 | 1 | 1 | 1 | |||
+ | 1 | 0 | 1 | 1 | 1 | 1 | |||
1 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | ||
+ | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | |
1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 1 |
Vejamos: 10 1111 (2) = 47 (10) ; 1101 (2) = 13 (10) ; 47 × 13 = 611 ; 10 0110 0011 (2) = 611 (10)
Divisão em binário
Já a divisão pode dar um pouco que pensar, mas não se afasta muito do conceito em decimal.
Vejamos, por exemplo, 89 ÷ 7
8'9 | 7 |
1 9 | 12 |
5 |
Lembremo-nos da primária e não usemos casas decimais:
- 89 ÷ 7 : a casa das dezenas vale 8, faz-se 8 ÷ 7 = 1, resto de 1
- Junta-se a casa das unidades, temos 19 ÷ 7 = 2, resto 5
- O resultado final é então 12 e resto de 5
Vejamos estes valores em binário: 101 1001 (2) ÷ 111 (2) e usemos subtracções parciais para ajudarem nos cálculos:
1 0 1 1'0 0 1 | 1 1 1 |
- 1 1 1 | 1 1 0 0 |
0 1 0 0 1 | |
- 1 1 1 | |
0 0 0 1 0 | |
- 0 0 0 | |
0 1 0 1 | |
- 0 0 0 | |
1 0 1 |
Passo-a-passo, temos:
- Precisamos de começar com 1011 para caber em 111
- Multiplicando por 1 no quociente, temos 111 e que se subtrai a 1011, ficando 100
- Baixa-se o 0 seguinte e ficamos com 1000
- Voltamos a ter mais 1 no quociente: 1000 – 111 = 001
- Baixa-se o outro 0 e ficamos com 10.
- 10 não cabe em 111, adicionamos agora um 0 no quociente
- Baixa-se, por fim, o 1 e ficamos com 101
- 101 também não cabe em 111 e temos mais um 0 no quociente
- Não tendo mais números, conclui-se que a divisão dá 1100 e resto de 101.
E, confirmando: 1100 (2) = 12 (10) e 101 (2) = 5 (10)
Vejamos então, para resumir e concluir, a tabuada em binário:
Repare-se que:
- Na adição, o 0 é – como em base 10 – elemento neutro
- Em 1 + 1 = 10, lembre-se que o 1 é transporte para o “vai 1”
- Na subtracção em 0 – 1 temos a questão do empréstimo do 1
- Na multiplicação o 0 é – como em base 10 – elemento “absorvente”
- Na divisão, não é possível dividir por 0 (NA – não se aplica)
Este artigo foi escrito com a antiga grafia.