Sottrazione con il Complemento

Concetti Chiave
  • La sottrazione con il complemento è un metodo efficiente per eseguire operazioni di sottrazione nei sistemi digitali.
  • Utilizza il complemento a 2 per trasformare la sottrazione in un'operazione di somma.
  • Il risultato della sottrazione può essere positivo o negativo, a seconda dei valori di M e N.
  • La sottrazione con il complemento può essere applicata sia a numeri decimali che binari.
  • La sottrazione con il complemento a 1 è un metodo alternativo che utilizza il complemento a (r - 1) e richiede un riporto circolare finale.

Sottrazione con i Complementi

Il metodo diretto di sottrazione insegnato nelle scuole elementari usa il concetto di riporto. In questo metodo, si prende in prestito un 1 da una posizione più significativa quando la cifra del minuendo è più piccola della cifra del sottraendo. Il metodo funziona bene quando una sottrazione viene svolta con carta e matita. Tuttavia, quando la sottrazione è implementata con hardware digitale, il metodo è meno efficiente del metodo che usa i complementi.

La sottrazione di due numeri senza segno (ossia maggiori o uguali a zero) a n cifre M - N in base r può essere fatta come segue:

  1. Aggiungere il minuendo M al complemento a r del sottraendo N.

    Matematicamente il tutto si trasforma in:

    M + c(N) =
    M + (r^n - N) =
    M - N + r^n
  2. Se M \geq N, la somma produrrà un riporto finale r^n, che può essere scartato; quello che rimane è il risultato M - N.

  3. Se M < N, la somma non produce un riporto finale ed è uguale a r^n - (N - M), che è il complemento a r di (N - M).

Proviamo a dimostrare quest'ultima affermazione. Se M < N, allora N - M è positivo e quindi:

M - N + r^n = r^n - (N - M)

Ma poiché r^n - (N - M) è il complemento a r di (N - M), dalla definizione, il risultato della sottrazione è il complemento a r di (N - M).

Adesso, proviamo a calcolare in pratica la sottrazione con i complementi.

Esempio

Usando il complemento a 10, sottrarre i due numeri decimali 72532 - 3250.

Per prima cosa, osserviamo che M = 72532 e N = 03250, ossia M > N.

Calcoliamo il complemento a 10 di N:

c(N) = 10^5 - 03250 = 100000 - 03250 = 96750

Successivamente, sommiamo il minuendo e il complemento del sottraendo:

M + c(N) =
72532 + 96750 =
169282

Il numero che abbiamo ottenuto ha 6 cifre, quindi possiamo scartare il riporto finale 10^5 e ottenere il risultato:

169282 - 100000 = 69282

Il risultato della sottrazione 72532 - 3250 è quindi 69282. Questo è lo stesso risultato che si ottiene sottraendo 3250 da 72532 usando il metodo diretto di sottrazione.

Si noti che M ha cinque cifre e N ha solo quattro cifre. Entrambi i numeri devono avere lo stesso numero di cifre, quindi scriviamo N come 03250. Prendendo il complemento a 10 di N si produce un 9 nella posizione più significativa. Il verificarsi del riporto finale significa che M \geq N e che il risultato è quindi positivo.

Esempio

Usando il complemento a 10, sottrarre 3250 - 72532.

Notiamo tre cose:

  1. M = 03250 e N = 72532, ossia M < N.
  2. Il risultato sarà negativo.
  3. M ha quattro cifre e N ne ha cinque, quindi dobbiamo scrivere M come 03250.
M = 03250

Calcoliamo il complemento a 10 di N:

c(N) = 10^5 - 72532 = 100000 - 72532 = 27468

Sommiamo il minuendo e il complemento del sottraendo:

M + c(N) =
03250 + 27468 =
30718

Non c'è riporto finale, infatti il risultato è minore di 10^5. Quindi per ottenere il risultato della sottrazione M - N dobbiamo prendere il complemento a 10 del risultato:

c(30718) = 10^5 - 30718 = 100000 - 30718 = 69282

E, successivamente, aggiungiamo il segno negativo:

-69282

Questo è proprio il risultato della sottrazione M - N che avremmo ottenuto sottraendo 72532 da 3250 usando il metodo diretto di sottrazione.

Si noti che poiché 3250 < 72532, il risultato è negativo. Poiché stiamo trattando con numeri senza segno, non c'è davvero modo di ottenere un risultato senza segno per questo caso. Quando si sottrae con i complementi, riconosciamo la risposta negativa dall'assenza del riporto finale e dal risultato complementato. Quando si lavora con carta e matita, possiamo cambiare la risposta in un numero negativo con segno per ottenere il risultato corretto.

Se lavoriamo con i numeri binari, la sottrazione con i complementi è fatta in modo simile, usando la procedura delineata precedentemente. Vediamo qualche esempio.

Esempio

Dati i due numeri binari:

  • X = (1010100)_2
  • Y = (1000011)_2

eseguire le due sottrazioni:

  1. X - Y
  2. Y - X

usando il complemento a 2.

Partiamo con la prima sottrazione:

  • I due numeri hanno lo stesso numero di cifre, quindi non dobbiamo fare alcuna modifica.
  • Calcoliamo il complemento a 2 di Y:

    c(Y) = 0111100 + 1 = 0111101
  • Sommiamo X e il complemento di Y:

    X + c(Y) =
    \begin{array}{rr} 1010100 &amp; + \\ 0111101 &amp; = \\ \hline 10010001 &amp; \end{array}
  • Il risultato che abbiamo ottenuto ha 8 cifre, quindi possiamo scartare il riporto finale 2^7 (ossia il bit più significativo):

    X - Y = 0010001

La presenza del riporto finale indica che X \geq Y, quindi il risultato è positivo.

Passiamo alla seconda sottrazione:

  • I due numeri hanno lo stesso numero di cifre, quindi non dobbiamo fare alcuna modifica.
  • Calcoliamo il complemento a 2 di X:

    c(X) = 0101011 + 1 = 0101100
  • Sommiamo Y e il complemento di X:

    Y + c(X) =
    \begin{array}{rr} 1000011 &amp; + \\ 0101100 &amp; = \\ \hline 1101111 &amp; \end{array}

Non c'è riporto finale. Pertanto, la risposta è:

Y - X = -c(1101111) = -0010001

Sottrazione con Complemento a 1

La sottrazione di numeri senza segno può anche essere fatta per mezzo del complemento a (r - 1). Si ricordi che il complemento a (r - 1) è uno meno del complemento a r. A causa di questo, il risultato dell'aggiunta del minuendo al complemento del sottraendo produce una somma che è uno meno della differenza corretta quando si verifica un riporto finale. Rimuovere il riporto finale e aggiungere 1 alla somma è chiamato riporto circolare finale.

Per chiarire questo, consideriamo qualche esempio.

Esempio

Dati i due numeri binari:

  • X = (1010100)_2
  • Y = (1000011)_2

eseguire le due sottrazioni:

  1. X - Y
  2. Y - X

stavolta usando il complemento a 1.

Partiamo con la prima sottrazione:

  • I due numeri hanno lo stesso numero di cifre, quindi non dobbiamo fare alcuna modifica.
  • Calcoliamo il complemento a 1 di Y:

    c_1(Y) = 0111100
  • Sommiamo X e il complemento di Y:

    X + c_1(Y) =
    \begin{array}{rr} 1010100 &amp; + \\ 0111100 &amp; = \\ \hline 10010000 &amp; \end{array}
  • Il risultato che abbiamo ottenuto ha 8 cifre, quindi possiamo scartare il riporto finale 2^7 (ossia il bit più significativo). Questo bit è il riporto circolare finale, che deve essere aggiunto al risultato:

    X - Y = 0010001 + 1 = 0010001

Adesso punto, possiamo notare che il risultato è lo stesso che abbiamo ottenuto usando il complemento a 2. La presenza del riporto finale indica che X \geq Y, quindi il risultato è positivo.

Passiamo alla seconda sottrazione:

  • I due numeri hanno lo stesso numero di cifre, quindi non dobbiamo fare alcuna modifica.
  • Calcoliamo il complemento a 1 di X:

    c_1(X) = 0101011
  • Sommiamo Y e il complemento di X:

    Y + c_1(X) =
    \begin{array}{rr} 1000011 &amp; + \\ 0101011 &amp; = \\ \hline 1101110 &amp; \end{array}

Non c'è riporto finale. Pertanto, la risposta è il complemento a 1 di 1101110:

Y - X = -c_1(1101110) = -0010001

Si noti che il risultato negativo si ottiene prendendo il complemento a 1 della somma, poiché questo è il tipo di complemento usato. La procedura con riporto circolare finale è anche applicabile alla sottrazione di numeri decimali non segnati con il complemento a 9.

Esempi

Esempio

Dati X = (1101010)_2 e Y = (0101011)_2, trovare X - Y con il complemento a 2.

  • Calcoliamo il complemento a 2 di Y:

    c(Y) = 1010100 + 1 = 1010101
  • Sommiamo X e il complemento di Y:

    X + c(Y) =
    \begin{array}{rr} 1101010 &amp; + \\ 1010101 &amp; = \\ \hline 10111111 &amp; \end{array}
  • Il risultato che abbiamo ottenuto ha 8 cifre, quindi possiamo scartare il riporto finale 2^7 (ossia il bit più significativo):

    X - Y = 01111111
Esempio

Dati X = (0101011)_2 e Y = (1101010)_2, trovare X - Y con il complemento a 2.

  • Calcoliamo il complemento a 2 di Y:

    c(Y) = 0010101 + 1 = 0010110
  • Sommiamo X e il complemento di Y:

    X + c(Y) =
    \begin{array}{rr} 0101011 &amp; + \\ 0010110 &amp; = \\ \hline 1000001 &amp; \end{array}
  • Il risultato che abbiamo non ha riporto finale. Pertanto, la risposta è il complemento a 2 di 1000001:

    X - Y = -c(1000001) = -0111111
Esempio

Dati X = (1101010)_2 e Y = (0101011)_2, trovare X - Y con il complemento a 1.

  • Calcoliamo il complemento a 1 di Y:

    c_1(Y) = 1010100
  • Sommiamo X e il complemento di Y:

    X + c_1(Y) =
    \begin{array}{rr} 1101010 &amp; + \\ 1010100 &amp; = \\ \hline 10111110 &amp; \end{array}
  • Il risultato che abbiamo ottenuto ha 8 cifre, quindi possiamo scartare il riporto finale 2^7 (ossia il bit più significativo). Questo bit è il riporto circolare finale, che deve essere aggiunto al risultato:

    X - Y = 0111110 + 1 = 0111111
Esempio

Dati X = (0101011)_2 e Y = (1101010)_2, trovare X - Y con il complemento a 1.

  • Calcoliamo il complemento a 1 di Y:

    c_1(Y) = 0010101
  • Sommiamo X e il complemento di Y:

    X + c_1(Y) =
    \begin{array}{rr} 0101011 &amp; + \\ 0010101 &amp; = \\ \hline 1000000 &amp; \end{array}
  • Il risultato che abbiamo non ha riporto finale. Pertanto, la risposta è il complemento a 1 di 1000000:

    X - Y = -c_1(1000000) = -0111111