O Excesso de uma soma

Quando fizemos a operação de 65-37 deitámos fora o bit de transporte, o carry out (Co) que por sinal até tinha o valor de 1. E deitámos fora simplesmente porque já não cabia na nossa representação a 8 bits.
Ao termos deitado fora esse bit podíamos ter cometido um erro, pois todos os bits têm em princípio sentido na representação de um número. Mas não, porque o resultado até é aquele que queríamos.

E pronto! Ficámos a saber que quando se subtrai 37 de 65 se pode deitar fora o último bit de transporte. Felizes e contentes. E já agora, se subtrairmos 38 de 65 como é?

É neste aspeto que o computador é extremamente exigente. Temos que lhe ensinar com o maior rigor como atua em todas as situações possíveis, encontrando para isso uma fórmula que estabeleça uma relação lógica para um comportamento padrão. Em matemática e lógica, ou bem que se percebe a razão de um determinado procedimento e se encontra a tal fórmula que nos explica em que situações esse procedimento é ou não correto, ou não percebemos a questão e portanto não a podemos explicar a nós próprios. Muito menos ao computador.

Foi por essa razão que elaborámos os 12 quadros da Figura 1, representando operações com  3 bits , sendo o de maior ordem representativo do sinal, que analisam as diversas combinações possíveis de operandos, seus sinais e operações em que se inserem, de forma a tentar encontrar uma relação no procedimento. Elaborámos ainda um outro quadro, que virá na Figura 2, representativo do resumo dos 12 quadros no comportamento do bit de maior ordem, o valor dos dos seus operandos, o valor do resultado e os valores de carry in (Ci) e carry out (Co).

Vamos verificar que nem sempre que o Co é 1 existe excesso e que o facto de o Co ser 0 não significa que não haja excesso.

Mas o Co representa o vai 1 de um somador. Se vai  1 é porque esse valor pertence ao resultado da soma. Como é possível a afirmação anterior? Por que razão, quando somámos um número com o seu simétrico, deitámos fora o último bit de transporte e o resultado ficou certo? Porquê?

Todo o raciocínio que vamos desenvolver aplica-se a números representados em complemento para 2, caso em que o bit de maior ordem representa o sinal e os números negativos passam a ter uma representação oposta aos positivos.
Nestas condições percebe-se que a questão seja completamente diferente da lógica básica que seguíamos para os números sem sinal. Nestes ou vai 1 ou não vai. Ou há excesso ou não há. Se vai 1 é porque faz falta. Tal como no sistema decimal.
Vamos então passar à análise das diversas hipóteses nos diversos Quadros da Figura 1, que não vão aparecer por ordem, para tentarmos chegar a uma conclusão.

Figura-3-18_Quadros_V_VI
Figura 1 – Quadros V e VI

1. Quando os Operandos de uma Soma Têm Sinais Diferentes Não Há Lugar a Excesso.

Não é preciso nenhum quadro para se chegar a esta conclusão. Nestes casos o resultado é sempre menor que o maior dos operandos e portanto é representável dentro do mesmo número de bits utilizado para esse operando. Todo e qualquer bit que esteja a mais é irrelevante. Podemos dizer que nesta situação nunca há excesso. De qualquer forma  esta situação está representada em duas possibilidades nos Quadros V e VI da Figura 1 onde podemos verificar o comportamento do circuito lógico e até a existência de Co de valor 1 em um dos casos.

Aqui está uma situação em que o Co é 1 e não há lugar a excesso.

Figura-3-18_Quadros_VII_VIII
Figura 1 – Quadros VII e VIII

2. Quando os Operandos de uma Subtração Têm Sinais Iguais Não Há Lugar a Excesso.

Afirmação em tudo idêntica à anterior, só que dita de forma inversa.

-a -(-b) = -a + b

O resultado será sempre inferior ao maior dos operandos e portanto representável dentro do mesmo número de bits utilizado para aquele. Esta afirmação está representada em duas situações nos Quadros VII e  VIII da Figura 1, onde podemos verificar o comportamento do circuito lógico e até a existência de Co de valor 1 em um dos casos.

Mais uma situação em que o Co é 1 e não há lugar a excesso.

Figura-3-18_Quadros_I_II_III_IV
Figura 1 – Quadros I, II, III e IV

3. Quando os Operandos de Uma Soma Têm Sinais Iguais e o Sinal do Resultado é Diferente do Sinal dos Operandos Há Lugar a Excesso.

(+a)+(+b) = a+b  ou  (-a)+(-b) = -a-b

Esta situação dá-se quando o resultado da operação não é representável dentro do mesmo número de bits dos operandos, coloca o bit mais significativo da representação do número na posição do sinal do resultado e o Co transporta o valor do sinal do resultado. Se os operandos tiverem por exemplo 3 bits já com sinal, o valor em análise é precisamente o 3º bit.
É evidente que o resultado da soma de dois números com o mesmo sinal não pode ter sinal diferente dos operandos e para chegar a esta conclusão não são precisos quadros. Portanto se o sinal muda é porque foi substituído por um dígito do número.
E porque é que há de mudar? O dígito não pode ter o mesmo valor do sinal?
Boa questão. Vamos lá ver se conseguimos perceber porquê.

Se os operandos tiverem ambos sinal positivo (0) e, sendo o primeiro dígito de um número positivo em ordem crescente numa nova ordem de bits o 1, o bit que devia corresponder ao sinal para o mesmo número de bits dos operandos muda sempre de sinal. O valor que lá estava, o sinal, era 0. O valor que lá passa a estar é 1.
De verificar ainda que, porque os bits de sinal são 0 e 0+0=0 o bit transportado final será também 0. Assim, para o último circuito somador, o novo, o carry in tem de ser 1 e o bit transportado pelo carry out  0, o sinal.

Aqui temos uma situação em que, sendo o carry out 0, há excesso. Assim, no último circuito somador, o bit Ci é 1 (o primeiro da nova ordem) e o bit transportado pelo Co  é 0 (o sinal). Uma situação em que o Co é 0 e há excesso.

Se os operandos tiverem ambos sinal negativo (1) e, sendo o primeiro dígito de um número negativo em ordem decrescente numa nova ordem de bits o 0, o bit que devia corresponder ao sinal para o mesmo número de bits dos operandos muda sempre de sinal. Assim, no último circuito somador, o  bit Ci é 0 (o 1º da nova ordem) e o bit transportado pelo Co  é 1 (o sinal).

Estas situações, para além de poderem ser verificadas nos Quadros I, II, III e IV da Figura 1 também podem ser verificadas nos pequenos quadros representativos do circuito somador do bit de maior ordem da Figura 2.

Figura-3-18_Quadros_IX_X_XI_XII
Figura 1 – Quadros IX, X, XI e XII

4. Quando os Operandos de Uma Subtração Têm Sinais Diferentes e o Sinal do Resultado é Diferente do Sinal do Primeiro Operando Há Lugar a Excesso.

(+a) – (-b) = a + b   ou    (-a )- (+b) = -a – b

Esta afirmação é em tudo idêntica à anterior só diferindo na forma como é dita. Subtrair um número negativo é igual a somar um positivo. Menos por menos dá mais. Podemos verificar graficamente o comportamento deste circuito nos Quadros IX, X, XI e XII da Figura 1.
Mas vamos fazer uma pequena referência a um pormenor que pode passar despercebido:

Aqui a diferença do sinal refere-se expressamente ao primeiro operando.

Conclusão

Na realidade, se formos aos quadros onde se representam situações em que há excesso (nestes quadros o último carry out tem por baixo a letra S de sim), os Quadros I, III, IX e XI da Figura 1, verificamos que o resultado, se for expresso só pelos 3 bits dos operandos está errado, mas se acrescentarmos o bit transportado (sempre o sinal), fica certo.

Conclusão: Só há excesso quando o carry out do somador do bit de maior ordem transporta o valor do sinal, porque no lugar dele passou a estar o representante de um bit do valor do número.

E como é que se ensina isto ao computador?

Figura-3-19
Figura 2

Vamos olhar para os 8 pequenos quadros da Figura 2, que têm identificadas a cores diferentes as situações em que há e não há excesso, de acordo com a análise que fizemos até agora. Os quadros dessa figura simbolizam o circuito somador do bit de maior ordem.

Por muda entende-se que o Ci e o Co desse circuito são diferentes. Por não muda o contrário.

Verificamos que nas situações em que há excesso, o Ci e o Co do último circuito somador são diferentes e que nas situações em que não há excesso, o Ci e o Co do último circuito somador são iguais.

Está então encontrada a relação lógica que gere este tipo de acontecimento em qualquer situação, a tal que procurávamos.

Então agora, com esta relação entre os dois estados, já podemos ensinar o computador. Basta dizer-lhe que:

 Se os valores dos dois últimos carry out forem diferentes há  excesso e se forem iguais não há excesso. Entenda-se que o Carry In do último circuito é o Carry Out do penúltimo. Assim sendo, pode-se dizer que há lugar a excesso quando o carry in e o carry out do circuito somador do último bit são diferentes e que não há lugar a excesso quando o carry in e o carry out do circuito somador do último bit são iguais.

Mas esta conclusão está escrita em Português, o que, como já sabemos, o computador não entende.

Então o que é que vamos ter que introduzir no circuito para que o computador seja informado dessa situação na sua linguagem?

Ora vejamos: Se forem diferentes, sim, é verdade, se forem iguais, não, é falso.

Mas onde é que  já ouvimos isto?

Foi na tabela verdade da porta lógica XOR. Então basta fazer dos dois últimos Co as entradas de uma porta XOR e o computador fica informado pela sua saída se há ou não direito a excesso.

A deteção de excesso é muito importante, porque a sua existência e a não possibilidade de extensão do número de bits  implica um erro, pois o resultado da operação não fica correto. Uma vez detetada e informado o Sistema Operativo, permite que ele pare a execução de um programa com uma mensagem de erro, impedindo assim a propagação do erro. O Sistema Operativo é algo que abordaremso mais tarde num Capítulo mais para a frente. Windows, iOS e Linux são exemplos de Sistemas Operativos.

A especial incidência neste tema deve-se ao facto de o intuito deste trabalho ser precisamente o contrário da introdução de axiomas, ou seja de constatações não explicadas.

O nome das coisas empina-se, mas a lógica que origina procedimentos tem que ser entendida. Tínhamos que demonstrar que desprezar um bit nas operações em complemento para 2 pode não ser um erro e porquê.

Esperamos ter conseguido.