TePSIT
DidatticaTecnologie e Progettazione di Sistemi Informatici e di Telecomunicazioni → UD2. Operazioni algebriche tra numeri senza segno



Operazioni algebriche tra numeri senza segno


Per poter analizzare nel dettaglio come il Computer esegue queste operazioni elementari, è necessario approfondire l’aritmetica binaria per comprendere come si realizzano le quattro operazioni classiche della matematica quali: somma, sottrazione, moltiplicazione e divisione con i numeri binari con segno, senza segno, in virgola mobile.

Addizione tra numeri binari senza segno

Le regole dell’addizione con numeri binari è sintetizzata nella seguente tabella.

Addizione Riporto (carry)
0 + 0 = 0 0
1 + 0 = 1 0
0 + 1 = 1 0
1 + 1 = 0 1

Quando sommiamo (1+1) otteniamo 0 e viene generato un riporto pari a 1. In tutti gli altri casi non c’è riporto.
Seguendo questa regola è possibile effettuare una qualsiasi addizione tra numeri binari utilizzando la classica tabella in cui incolloniamo i bit dei due operandi da sommare.

Primo esempio addizioniamo i numeri 5 e 1.
Prima operazione trasformiamo i due numeri decimali in numeri binari usando le regole di conversione viste in precedenza.

Dividendo Divisore Quoziente Resto
510 210 210 12
210 210 110 02
110 12
Risultato:   1012



Dividendo Divisore Quoziente Resto
110 12
Risultato:   12

Una volta calcolato i due valori binari, incolonniamoli per effettuare la somma.

Riporto: 0 1
1 0 1 +
1 =
Risultato: 1 1 0

Per verificare la correttezza dell'operazione, convertiamo il risultato binario in decimale, otterremo:
N = 1 * 22 + 1 * 21 + 0 * 20 = 4 + 2 + 0 = 6
Infatti 5 + 1 = 6.

Secondo esempio addizioniamo i numeri 14 e 3.
Prima operazione trasformiamo i due numeri decimali in numeri binari usando le regole di conversione viste in precedenza.

Dividendo Divisore Quoziente Resto
1410 210 710 02
710 210 310 12
310 210 110 12
110 12
Risultato:   11102



Dividendo Divisore Quoziente Resto
310 210 110 12
110 12
Risultato:   112


Riporto: 1 1 1 0
1 1 1 0 +
1 1 =
Risultato: 1 0 0 0 1

Convertiamo il risultato binario in decimale, otterremo:
N = 1 * 24 + 0 * 23 + 0 * 22 + 0 * 21 + 1 * 20 = 16 + 0 + 0 + 0 + 1= 17
Infatti 14 + 3 = 17.
Possiamo notare che nel secondo esempio per poter rappresentare il risultato della somma realizzata, è necessario un ulteriore bit rispetto alla dimensione massima dei due numeri binari di partenza. Questo a causa dell’ultimo riporto. Questa osservazione ci aiuta a capire che un processore, pur potendo effettuare le somme correttamente, avrà un limite di rappresentazione fissato sul numero massimo di bit utilizzabili. I processori elaborano 8, 16, 32 fino, attualmente, a 64bit oltre il quale un numero non è rappresentabile.

Terzo esempio immaginiamo di avere addendi in binario di lunghezza pari a 8 bit; 23210 (111010002) e 8610 (011011102).

Riporto: 1 1 1 0 1 0 0 0
1 1 1 0 1 0 0 0 +
0 1 1 0 1 1 1 0 =
Risultato: - 0 1 0 1 0 1 1 0

Poichè abbiamo a disposizione solo 8 bit, il nono bit (quello più significativo) generato dal riporto, non verrebbe utilizzato. Se andiamo a calcolare il decimale del numero ottenuto, avremo il valore 8610 mentre il valore atteso era 3422.
Si noti che in corrispondenza del nono bit nella forma di conversion da binario a decimale, avremmo avuto 1 * 29 = 25610 che sommato a 8610 avrebbe dato proprio 34210 il valore che stavamo cercando di calcolare.
Il processore, quando non può rappresentare un numero per via della lunghezza ridotta del numero di bit, lancia un warning detto overflow che segnala il risultato non corretto in quanto eccede la capacità di rappresentazione di quel processore. L’overflow è segnalato proprio grazie all’ultimo bit di riporto che eccede il limite massimo. Quel bit è l’ultimo carry (bit di riporto) che come vedremo più tardi sarà memorizzato in un apposito registro del processore.

Esercizio 1 eseguire le seguenti somme utilizzando massimo 8 bit ed evidenziando eventuali overflow: 8+6, 21+10, 17+19, 61+75, 124+208



Sottrazione tra numeri binari senza segno

Nella sottrazione tra numeri binari senza segno non si considera il riporto ma il prestito (barrow). Cambiano inoltre le regole delle operazioni elementari tra bit in base alla seguente tabella.

Sottrazione Prestito
0 - 0 = 0 0
1 - 0 = 1 0
0 - 1 = 1 1
1 - 1 = 0 0

La particolarità, in questo caso, è che quando proviamo ad effettuare l’operazione 0 – 1 il risultato sarà 1 ma verrà chiesto in prestito un bit, che varrà 1.

Primo esempio sottraiamo i due numeri 5 (1012) e 3 (112).
Incolonniamo i due numeri per effettuare la sottrazione (prevedendo una riga per il prestito).

1 0 1 -
Prestito: 0 1
1 1 =
Risultato: 0 1 0

La prima operazione è 1 – 1 = 0. Non abbiamo necessità di alcun prestito.
La seconda operazione è invece 0 – 1 = 1, in cui abbiamo preso un prestito dal successivo bit.
La terza operazione è 0 – 0 in quanto il bit precedentemente pari a 1 è stato prestato nell’operazione precedente e quindi attualmente vale 0. L’ultima operazione vale dunque 0.
Il risultato sarà 010 che vale 210 che è il risultato che ci attendevamo.
In questo esempio, si noti, che alla seconda operazione abbiamo trovato subito un prestito dal bit subito successivo. Quando questo non accade, si scorrono tutti i bit successivi fino a trovare il valore 1. A quel punto si pone a zero quest’ultimo e si invertono tutti quelli precedenti (che erano a 0) a 1.

Secondo esempio sottraiamo 146 (100100102) e 127 (11111112).

1 1 1 1 1 1 1 0 -
Prestito: 0 0 1 0 0 1 1
1 1 1 1 1 1 =
Risultato: 0 0 1 0 0 1 1

Il risultato finale è 100112 che è pari a 1910, infatti 146 – 127 = 19.

Esercizio 2 eseguire le seguenti sottrazioni: 15-4, 10-7, 32-15



Anche nella sottrazione si può verificare un overflow causato dall’ultimo prestito. Il processore gestisce i prestiti come se fossero carry e quindi usando lo stesso registro.
Ad esempio la sottrazione tra 10410 e 12210 da un overflow.

Esercizio 3 eseguire la sottrazione 104-122 segnalandone onato2000un eventuale overflow



Prodotto tra numeri binari senza segno

Il prodotto tra numeri binari è identico al prodotto tra decimali.
Le operazioni elementari tra binari è la seguente:


Moltiplicazione
0 * 0 = 0
1 * 0 = 0
0 * 1 = 0
1 * 1 = 1

Esempio moltiplichiamo 1010 (10112) e 1110 (10102).

b6 b5 b4 b3 b2 b1 b0
1 0 1 1 x
1 0 1 0 =
0 0 0 0 +
1 0 1 1 -
0 0 0 0 - -
1 0 1 1 - - -
1 1 0 1 1 1 0

Il risultato del prodotto è 1101110 pari cioè a 11010.

Esercizio 4 eseguire le seguenti moltiplicazioni usando al più 8 bit: 8x3, 6x5, 15x12 e 18x20



Operazione di shift per casi particolari di moltiplicazione tra binari senza segno e potenze di due.
Esistono casi particolari di prodotto tra due numeri binari senza segno che è possibile risolvere con l’operazione di shift.

Moltiplicazione per due

Per risolvere il prodotto di un qualsiasi numero per due, è sufficiente aggiungere uno 0 come bit meno significativo al numero stesso (shiftando i restanti bit del numero a sinistra).

Esempio 710 * 210 avremo 1112 * 102 = 11102 = 1410

Moltiplicazione per quattro

Vale la stessa regola anche per la moltiplicazione per 4 solo che stavolta si aggiungono due bit pari a 0 a destra del numero come bit meno significativi.

Esempio 510 * 410 avremo 1012 * 1002 = 101002 = 2010.

Moltiplicazione per una potenza di 2 (2n)

La regola può essere generalizzata al prodotto di numeri per una potenza di due.
In questo caso si effettua uno shift a sinistra di n posizioni e si aggiungono n zeri come bit meno significativi.

Divisione tra numeri binari senza segno

Anche nella divisione tra numeri binari, la regola è identica alla divisione tra decimali.
Divideremo un dividendo per un divisore ottenendo un quoziente ed un resto.

Esempio effettuiamo la divisione tra 5410 : 510.
In binario avremo 1101102 : 1012

b5 b4 b3 b2 b1 b0
1 1 0 1 1 0 : 1 0 1 = 1 0 1 0
1 0 1
0 0 1 1
- - 1 1 1
- 1 0 1
0 1 0 0


Il risultato della divisione sarà costituito dalla parte quoziente pari a 10102 = 1010 con resto pari a 1002 = 410.

Esercizio 5 eseguire le seguenti divisioni: 16:8, 23:5, 60:4



Operazione di shift per casi particolari di divisione tra binari senza segno e potenze di due.

Divisione per due

Per risolvere la divisione tra un numero e due, è sufficiente togliere il bit meno significativo (shift a destra). Nel caso in cui il bit meno significativo è pari a 1, allora il resto è pari ad 1, diversamente è pari a zero.

Divisione per quattro

La regola è la stessa anche divendo per quattro. Ciò che cambia è che stavolta ad essere rimossi sono i due bit meno significativi. Nel caso entrambi siano uguali a zero, allora la divisione non ha resto, diversamente il resto sarà proprio pari ai due bit rimossi.

Divisione per potenza di due

La regola può essere generalizzata alla divisione tra numeri per una potenza di due.
In questo caso si effettua uno shift a destra di n posizioni e si rimuovono gli n bit meno significativi. Se tali bit sono tutti uguale a zero allora il resto sarà zero, diversamente se almeno uno dei bit è 1, allora l’insieme dei bit sarà il resto diverso da zero.

Complemento a 1

Un’altra operazione importante nel sistema binario è il complemento.
In particolare il complemento a 1 (CA1) si ottiene invertendo ogni bit con il suo complementare.
esempio CA1(011110) = 100001

Complemento a 2

Il complemento a 2 (CA1), invece, è il complemento a 1 al cui risultato viene aggiunto il valore uno.

esempio CA2(10100) = CA1(10100) + 00001 = 01011 + 00001 = 01100.

Esiste un’ulteriore tecnica per ottenere il complemento a 2 di un numero che consiste nel individuare il primo bit pari a 1 partendo dal bit meno significativo verso il bit più significativo.
Una volta individuato, dal bit successivo invertire tutti i bit.

Esempio CA1 (10010010) -> 10010010 -> 01101110.



Aiutati nelle conversioni e le operazione in binario con l'applicazione InformaticaXTutti


Cosa abbiamo imparato da questa lezione

Conoscenze
  • Quali sono i passi da seguire per effettuare le operazioni elementari tra numeri binari senza segno
  • Quali sono i passi da seguire per effettuare le operazioni di complemento a 1 e complemento a 2
  • Cosa si intende per overflow
Abilità
  • Siamo in grado di scandire i passi per effettuare le operazioni elementari tra numeri binari senza segno, complemento a 1 e complemento a 2
Competenze
  • Siamo in grado di effettuare le operazioni algebriche su tra qualsiasi coppia di numeri binari
  • Siamo in grado di determinare se una operazione albgebrica tra numeri binari restituisce un numero binario rappresentabile dato un tot di bit