Article image
Fernando Araujo
Fernando Araujo21/02/2024 11:23
Compartilhe

<Direto ao Ponto 18> Vamos REaprender as 4 operações? Em binário!

  • #Informática Básica

Artigos desta série: ( < ) Anterior | Índice | Seguinte ( > )

 

 

Olá, dev!

 

Este é mais um artigo da série DIRETO AO PONTO, que eu estou escrevendo para a DIO. Ele vai tratar da forma que o computador realiza operações aritméticas com os números representados no formato binário.

 

 

Sumário

1.   Introdução

2.   Operação de adição

3.  Operação de multiplicação

4.  Ocorrência de overflow e underflow

5.   Considerações finais

6.   Referências

 

1 – Introdução

 

A série DIRETO AO PONTO enfoca artigos sobre conhecimentos básicos da programação e é voltada, principalmente, para os iniciantes.

 

Este novo artigo vai tratar da forma como o computador realiza operações aritméticas com os números representados no formato binário.

 

As 4 operações básicas podem ser realizadas da mesma forma que usamos para os números decimais, com a diferença do número de algarismos que usamos para cada base. 

 

No entanto, o computador precisaria implementar circuitos diferentes para cada uma delas. Assim, por simplicidade de implementação, algumas operações são implementadas de formas diferentes, aproveitando os circuitos já utilizados para implementar outras operações.

 

 

2 – Operação de adição

Primeiro, vamos relembrar a operação básica de adição usada com os números decimais, inteiros positivos (números naturais).

 

Exemplo 1, para adicionar os números 158 e 274, com o algoritmo mais comum.

 

 +1  +1

 1     5     8

 2     7     4 +

__________

 4     3     2

 

Os números entre parênteses significam o conhecido vai-um, usado quando a soma dos números da coluna anterior supera algarismo mais significativo da base (no caso decimal, o 9, no binário, o 1), e a quantidade de agrupamentos completos da ordem maior à esquerda é adicionada a ela, para ser somado aos números que já estão lá.

 

 

Exemplo 2, para realizar a soma binária dos números decimais 9 e 5, representados em binário de 4 bits, usando o mesmo algoritmo, temos:

  

            +1

1    0    0    1

0    1    0    1  +

_____________

1    1    1    0   

 

Veja que ocorre um vai-um na soma da coluna mais á esquerda (das unidades), cujo resultado é 2 (1 + 1), mas não existe esse algarismo na representação em base 2. Logo, o valor 1 (1 par) será somado na coluna seguinte (a dos pares).

 

O resultado 1110 representa o número decimal 14, significando que ele está correto também em numeração decimal

 

A tabela a seguir mostra as 4 possibilidades de resultado para a soma de 2 algarismos binários (C = A + B).

 

image


 Para as colunas seguintes, à esquerda, existe uma pequena diferença, pois pode ter a presença do vai-um (dígito 1) resultante da soma da coluna anterior. Então, teremos uma tabela mais completa:

 

image

 

E esta tabela vale para qualquer coluna além daquela mais à esquerda.

 

Além disso, caso seja considerado um vai-um inexistente (com valor 0), ela se torna padrão para qualquer coluna da soma entre dois números binários.


image

  

Existe um componente eletrônico que implementa a adição de binários exatamente desta forma, chamado somador completo, mas isso é assunto para um próximo artigo.

 

 

Subtração binária

 

A subtração pode ser implementada de maneira semelhante a este algoritmo, mas é mais comum (e padronizado) recorrer à uma adição com o simétrico do segundo operando para realizar a subtração.

 

A – B = A + ( -B )

 

 

Exemplo 3, para realizar a subtração binária do número decimal 9 menos 5, representados em binário de 4 bits, é mais comum realizarmos a operação 9 + (-5), desta forma:

 

Decimal 9 = binário 1001

 

Decimal 5 = binário 0101

 

Invertendo = binário 1010

Soma +1   = binário 0001

Decimal -5 = binário 1011

 

 

                    +1   +1    +1

Binário 9 ->         1    0    0    1 

Binário -5 ->         1    0    1    1  +

                      __________________________

                      1    0    1    0    0   

 

Para 4 bits, descartando-se os bits à esquerda que ultrapassam estes 4 bits, temos o resultado binário 0100, ou seja, decimal 4.

  

 

3 – Operação de multiplicação binária

 

Primeiro, vamos relembrar a operação básica de adição usada com os números decimais, inteiros positivos (números naturais).

 

Exemplo 3, para multiplicar os números 345 e 120, com o algoritmo mais comum.

 

                         +1

                     3    4    5

                     1    0    2  x

                     __________

                     6    9    0

              0    0    0

       3    4    5

______________________

       3    5    1    9    0

 

 

Agora vamos ver um exemplo com números binários, que apresenta uma grande simplificação, pois os números serão multiplicados por 0 ou 1, resultando em zero ou nele mesmo. Desta forma, o hardware para realizar a multiplicação também será bem simplificado com este algoritmo.

  

Exemplo 4, para multiplicar os números 9 e 5, usando 4 bits para cada um deles, com o algoritmo mais comum, teremos.

 

Decimal 9 = binário 1011

Decimal 5 = binário 0101

 

Binário 9 ->  1    0    1    1

Binário 5 ->  0    1    0    1  x

                      __________________________

 

             +1

                      1    0    1    1

               0    0    0    0

        1    0    1    1

 0    0    0    0

__________________________

 0    1    1    0   1    1    1

  

Em 7 bits, temos o resultado binário 0110111 ou seja, decimal 55, confirmando a veracidade do resultado em decimal.

  

Veja que o resultado da multiplicação pode ocupar até o dobro dos bits dos seus fatores. Por isso, é importante tratar do assunto de overflow e underflow.

 

 

Divisão binária

 

Em geral, a divisão é implementada por subtrações sucessivas. O divisor é subtraído do dividendo, sucessivamente, até o resultado ser menor do que o divisor. Contam-se quantas vezes a operação foi feita e teremos o resultado da divisão inteira. O resto da divisão é o resultado da última subtração.

 

 

Exemplo 5, para dividir os números 11 e 5, usando 4 bits para cada um deles, usando este algoritmo, teremos.

 

Decimal 11 = binário 1011

 

Decimal 5 = binário 0101

 

Invertendo = binário 1010

Soma +1   = binário 0001

Decimal -5 = binário 1011

 

 

                    +1   +1 +1 +1

Binário 11 ->        1    0    1    1

Binário -5 ->          1    0    1    1  +

                      __________________________

                       1    0    1    1    0   

 

Para 4 bits, descartando-se os bits à esquerda que ultrapassam estes 4 bits, temos o resultado binário 0110, ou seja, decimal 6.

 

Agora, repetindo o algoritmo subtraindo-se 5 de 6, temos:

 

 

                            +1 +1   +1

Binário 6 ->          0    1    1    0

Binário -5 ->          1    0    1    1  +

                      __________________________

                       1    0    0    0    1   

 

Para 4 bits, descartando-se os bits à esquerda que ultrapassam estes 4 bits, temos o resultado binário 0001, ou seja, decimal 1. Como este valor é menor do 1que 5, não pode mais tirar 5 de 1, encerrando o algoritmo.

 

Desta forma, foram realizadas 2 subtrações, então esse é o resto inteiro da divisão. O resto desta divisão é o resultado da última subtração, decimal 1. Ou seja, em decimal, 11 dividido por 5 dá 2, com resto 1.

 

As operações com representações de números em ponto flutuante são mais complexas e ficam para outro artigo.

 

 

4 - Ocorrência de overflow e underflow

 

A largura de bits de um computador limita os valores máximos e mínimos que ele pode representar como inteiros, tanto sem sinal quanto com sinal.

 

As operações aritméticas sobre números que podem ser representados em um número fixo de bits pode gerar resultados que não podem ser representados no mesmo formato.

 

Por exemplo, adicionar dois inteiros de n bits pode gerar um resultado que não pode ser representado em n bits, e é possível gerar resultados negativos subtraindo dois inteiros positivos, o que também não pode ser representado por um número sem sinal de n bits.

 

Quando uma operação gera um resultado que não pode ser expresso no formato de seus operandos de entrada, diz-se que ocorreu um overflow, quando o resultado de uma operação é muito grande para ser representado no formato de entrada ou underflow, quando o resultado é muito pequeno para ser representado no formato.

 

Os sistemas lidam com estas ocorrências de maneiras diferentes, alguns sinalizam um erro, outros substituem o resultado pelo valor mais próximo que pode ser representado no formato.

 

Os detalhes destas ocorrências estão fora do escopo deste artigo e não serão tratados aqui.

 

 

5 – Considerações finais

Este é mais um artigo da série DIRETO AO PONTO, que eu estou escrevendo para a DIO. Ele tratou de como as operações aritméticas básicas são implementadas para números binários, na base 2.

 

O mesmo algoritmo usado por estas operações em números decimais podem ser aplicados para os números binários. No entanto, por questões de simplificação na implementação de circuitos eletrônicos do computador, algumas diferenças ocorrem.

 

Por exemplo, a multiplicação pode ser implementada como uma soma de adições individuais, a subtração também pode ser implementada por uma soma com o operando simétrico e a divisão pode ser implementada por subtrações sucessivas.

 

Desta forma, um mesmo tipo de circuito pode ser usado para implementar vários tipos de operações, ao invés de se criar um circuito diferente para cada uma delas.

 

A implementação de operações em ponto flutuante é mais complexa e fica para outro artigo, mais detalhado.

 

6 – Referências

[1] CARTER Nicholas, Schaum’s Outline of Computer Architecture. McGraw-Hill, 2002.

 

 

 

Artigos desta série: ( < ) Anterior | Índice | Seguinte ( > )

 

Compartilhe
Comentários (0)