Somma e Sottrazione Aritmetica dei Numeri Binari con Segno

Concetti Chiave
  • La rappresentazione dei numeri binari con segno in complemento a 2 permette di eseguire addizione e sottrazione come un'unica operazione di addizione.
  • L'addizione aritmetica dei numeri binari con segno in complemento a 2 non richiede confronto tra i numeri, ma solo l'addizione dei bit, inclusi i bit di segno.
  • La sottrazione aritmetica dei numeri binari con segno in complemento a 2 si ottiene prendendo il complemento a 2 del sottraendo e sommando al minuendo.
  • L'overflow si verifica quando il risultato di un'operazione richiede più bit di quelli disponibili, e può causare un errore nel segno del risultato.
  • Per evitare l'overflow, è importante assicurarsi che il numero di bit utilizzati sia sufficiente per rappresentare i risultati delle operazioni.

Addizione Aritmetica tra Numeri Binari con Segno

L'addizione di due numeri nel sistema segno-modulo segue le regole dell'aritmetica ordinaria.

Se i segni sono uguali, si addizionano i due moduli e si dà alla somma il segno comune. Se i segni sono diversi, si sottrae il modulo più piccolo da quello più grande e si dà alla differenza il segno del modulo più grande.

Per esempio, volendo sommare i due numeri decimali in segno-modulo +25 e -37 dobbiamo procedere in questo modo:

  1. Verifichiamo se i numeri sono concordi o discordi.

    Nel nostro caso i due numeri sono discordi, perché uno è positivo e l'altro negativo. In tal caso, dobbiamo sottrarre il modulo più piccolo dal modulo più grande.

  2. Il numero con il modulo più grande è -37, quindi il risultato sarà negativo.

  3. Sottraiamo il modulo più piccolo, 25, dal modulo più grande, 37:

    37 - 25 = 12
  4. Diamo al risultato il segno del numero con il modulo più grande, che è negativo:

    -12

Questo è un processo che richiede un confronto dei segni e dei moduli e poi l'esecuzione di addizione o sottrazione. Quindi, un eventuale circuito digitale che effettua l'addizione aritmetica di due numeri interi dovrà necessariamente svolgere un confronto tra i due numeri per determinare se sono concordi o discordi, e poi eseguire l'addizione o la sottrazione a seconda del caso. Questo è la motivazione principale per cui nei circuiti digitali si tende ad usare la rappresentazione dei numeri in complemento a 2, che non richiede un confronto tra i numeri per eseguire l'addizione o la sottrazione come vedremo tra poco.

La stessa procedura si applica ai numeri binari nella rappresentazione segno-modulo.

Ad esempio, per sommare i numeri binari +6 e -3 in segno-modulo, dobbiamo prima convertire i numeri in binario:

  1. Convertiamo +6 in binario: +6 = 00000110 (in 8 bit).
  2. Convertiamo -3 in binario: -3 = 10000101 (in 8 bit, in segno-modulo).
  3. I segni sono discordi, quindi sottraiamo il modulo più piccolo dal modulo più grande:

    \begin{array}{rrr} 00000110 & - & \text{modulo di +6} \\ 00000101 & = & \text{modulo di -3} \\ \hline 00000001 & & \text{risultato} \\ \end{array}
  4. Il modulo più grande è +6, quindi il risultato sarà positivo: +1 = 00000001.

Al contrario, la regola per addizionare numeri nel sistema segno-complemento non richiede confronto o sottrazione, ma solo addizione. La procedura è molto semplice e può essere enunciata come segue per i numeri binari:

Definizione

Addizione Aritmetica dei Numeri Binari con Segno in Complemento a 2

L'addizione di due numeri binari con segno con numeri negativi rappresentati nella forma segno e complemento a 2 si ottiene adoperando questo procedimento:

  1. Sommare i due numeri binari, inclusi i bit di segno.
  2. Se il riporto finale è 0, il risultato è corretto.
  3. Se il riporto finale è 1, il risultato va scartato.

Vediamo alcuni esempi di addizione aritmetica di numeri binari con segno in complemento a 2:

\begin{array}{rrrr} + & 6 & 00000110 & + \\ + & 13 & 00001101 & = \\ \hline + & 19 & 00010011 & \end{array}
\begin{array}{rrrr} - & 6 & 11111010 & + \\ + & 13 & 00001101 & = \\ \hline + & 7 & 00000111 & \end{array}
\begin{array}{rrrr} + & 6 & 00000110 & + \\ - & 13 & 11110011 & = \\ \hline - & 7 & 11111001 & \end{array}
\begin{array}{rrrr} - & 6 & 11111010 & + \\ - & 13 & 11110011 & = \\ \hline - & 19 & 11101101 & \end{array}

Si noti che i numeri negativi devono essere inizialmente in forma complemento a 2 e che se la somma ottenuta dopo l'addizione è negativa, è in forma complemento a 2. Per esempio, -7 è rappresentato come 11111001, che è il complemento a 2 di +7.

In ognuno dei quattro casi, l'operazione eseguita è l'addizione con il bit di segno incluso. Qualsiasi riporto fuori dalla posizione del bit di segno viene scartato, e i risultati negativi sono automaticamente in forma complemento a 2.

Questo è il vantaggio principale del sistema complemento a 2: non è necessario un confronto tra i numeri per determinare se sono concordi o discordi, e non è necessario sottrarre il modulo più piccolo dal modulo più grande. Si esegue semplicemente l'addizione dei due numeri binari, inclusi i bit di segno, e si scarta il riporto finale se presente.

Per ottenere una risposta corretta, dobbiamo assicurarci che il risultato abbia un numero sufficiente di bit per accogliere la somma. Se iniziamo con due numeri a n bit e la somma occupa n + 1 bit, diciamo che si verifica un overflow. Quando si esegue l'addizione con carta e matita, un overflow non è un problema, perché non siamo limitati dalla larghezza della pagina. Estendiamo semplicemente la parola aggiungendo un altro 0 a un numero positivo o un altro 1 a un numero negativo nella posizione più significativa per estendere il numero a n + 1 bit e poi eseguiamo l'addizione. L'overflow è un problema nei computer perché il numero di bit che contengono un numero è finito e fisso, e un risultato che eccede il valore finito di 1 non può essere accolto.

Definizione

Overflow nell'addizione tra numeri binari

Quando si effettua l'addizione di due numeri binari, rappresentati in complemento a 2 con n bit, se il risultato richiede n + 1 bit per essere rappresentato, si verifica un overflow. In questo caso il risultato è considerato corretto solo se il riporto non influisce sul bit di segno.

Per chiarire cosa accade in caso di overflow, consideriamo l'addizione di due numeri binari con segno in complemento a 2 rappresentati con 4 bit:

\begin{array}{rrrr} + & 6 & 0110 & + \\ + & 5 & 0101 & = \\ \hline + & 11 & 1011 & \end{array}

Il risultato corretto è 1011, ossia +11. Tuttavia, se consideriamo il bit di segno, il risultato è negativo, perché il bit più significativo è 1. Quindi, in questo caso, si verifica un overflow. Interpretando il risultato come un numero binario con segno in complemento a 2, otteniamo -5, che è chiaramente errato. Questo è un esempio di overflow, dove il riporto finale ha influenzato il bit di segno. Dal momento che il risultato si è rigirato in un numero negativo, in questi casi si parla di wrap-around. Il problema è che per rappresentare correttamente +11 avremmo bisogno di un bit in più, quindi il risultato corretto non può essere rappresentato con 4 bit.

La stessa cosa può accadere quando si sommano due numeri negativi. Consideriamo l'addizione di -6 e -5 in complemento a 2 con 4 bit:

\begin{array}{rrrr} - & 6 & 1010 & + \\ - & 5 & 1011 & = \\ \hline - & 11 & (1)0101 & \end{array}

Il risultato corretto è -11, che in complemento a 2 dovrebbe essere scritto con 5 bit come 10101. Tuttavia, poiché il riporto viene scartato, il risultato è 0101, che è +5 in complemento a 2. Anche in questo caso, si verifica un overflow, perché il riporto finale ha influenzato il bit di segno, e il risultato corretto non può essere rappresentato con 4 bit.

Rappresentare numeri negativi in complemento a 2 non è una tecnica familiare a coloro che sono abituati al sistema segno-modulo. Per determinare il valore di un numero negativo nel complemento a 2 con segno, è necessario convertire il numero in un numero positivo per metterlo in una forma più familiare. Per esempio, il numero binario con segno 11111001 è negativo perché il bit più a sinistra è 1. Il suo complemento a 2 è 00000111, che è l'equivalente binario di +7. Riconosciamo quindi il numero negativo originale come uguale a -7.

Sottrazione Aritmetica dei Numeri Binari con Segno in Complemento a 2

La sottrazione di due numeri binari con segno quando questi numeri negativi sono in forma complemento a 2 è semplice e può essere enunciata come segue:

Definizione

Sottrazione Aritmetica dei Numeri Binari con Segno in Complemento a 2

Il procedimento per sottrarre due numeri binari con segno in complemento a 2 è il seguente:

  1. Prendere il complemento a 2 del sottraendo (incluso il bit di segno).
  2. Aggiungerlo al minuendo (incluso il bit di segno).
  3. Se il riporto finale è 0, il risultato è corretto.
  4. Se il riporto finale è 1, tale riporto va scartato.

Il fatto che la sottrazione può essere eseguita come un'addizione del complemento a 2 del sottraendo è una delle ragioni principali per cui il complemento a 2 è così popolare nei circuiti digitali. Non è necessario un circuito separato per la sottrazione, poiché può essere eseguita con lo stesso circuito che esegue l'addizione.

Inoltre, la trasformazione di una sottrazione in un'addizione è giustificata dalle seguenti relazioni algebriche:

(\pm A) - (+B) = (\pm A) + (-B);
(\pm A) - (-B) = (\pm A) + (+B).

In entrambe i casi abbiamo cambiato la sottrazione in un'addizione, cambiando il segno del sottraendo. Quindi, per esempio, -6 - 3 diventa -6 + (-3), e -6 - (-3) diventa -6 + 3.

Cambiare un numero positivo in un numero negativo è un'operazione semplice: basta prendere il complemento a 2 del numero positivo. Il contrario è anche vero, perché il complemento di un numero negativo in forma complemento produce il numero positivo equivalente.

Per chiarire tutto, consideriamo questa sottrazione di esempio:

\begin{array}{rr} -6 & - \\ -13 & = \\ \hline +7 & \\ \end{array}

Proviamo ad effettuare questa sottrazione in binario in complemento a 2 con 8 bit.

Per prima cosa convertiamo -6 in complemento a 2, -6 = 11111010, e convertiamo -13 in complemento a 2, -13 = 11110011.

Dovremmo effettuare la sottrazione che segue:

\begin{array}{rr} 11111010 & - \\ 11110011 & = \\ \hline \end{array}

Ma applichiamo il metodo descritto sopra. Quindi complementiamo a 2 il sottraendo, -13, e otteniamo:

11110011 (-13) \rightarrow 00001101 (+13)

Quindi, anziché sottrarre -13, sommiamo +13 al minuendo -6:

\begin{array}{rr} 11111010 & + \\ 00001101 & = \\ \hline 00000111 & \\ \end{array}

Il risultato è 00000111, che è +7 in complemento a 2. Quindi, la sottrazione -6 - (-13) è uguale a +7 come ci si aspettava.

Consiglio

Universalità della Somma Binaria

Vale la pena notare che i numeri binari nel sistema segno-complemento sono addizionati e sottratti dalle stesse regole di base di addizione e sottrazione dei numeri senza segnati.

Pertanto, i computer hanno bisogno di un unico circuito hardware comune per gestire entrambi i tipi di aritmetica.

Questa considerazione ha portato il sistema segno-complemento a essere usato in virtualmente tutte le unità aritmetiche dei sistemi informatici. L'utente o il programmatore deve interpretare i risultati di tale addizione o sottrazione diversamente, a seconda se si assume che i numeri siano segnati o non segnati.

Esempi

Mostriamo, per concludere questa lezione, alcuni esempi di addizione (e sottrazione) di numeri binari con segno in complemento a 2 rappresentati con 8 bit:

\begin{array}{rrrrr} +4 & 0000 & 0100 & + \\ +11 & 0000 & 1011 & = \\ \hline +15 & 0000 & 1111 & \end{array}
\begin{array}{rrrrr} -4 & 1111 & 1100 & + \\ +11 & 0000 & 1011 & = \\ \hline +7 & 0000 & 0111 & \end{array}
\begin{array}{rrrr} +4 & 0000 & 0100 & + \\ -11 & 1111 & 0101 & = \\ \hline -7 & 1111 & 1001 & \end{array}
\begin{array}{rrrr} -4 & 1111 & 1100 & + \\ -11 & 1111 & 0101 & = \\ \hline -15 & 1111 & 0001 & \end{array}