***** OPERAZIONI SU NUMERI BINARI ***** Vediamo ora le operazioni più semplici sui numeri binari, ossia le operazioni di somma e sottrazione. SOMMA: Per sommare due numeri binari serve che abbiano lo stesso numero di bit, altrimenti bisogna estendere il segno del più corto. Vediamo degli esempi: 1) Sommare 1001 = 9 con 1100 = 12. Come tutti sanno questa somma deve valere 21. Siccome il numero di bit per entrambi i numeri è 4, si procede subito con la somma per colonne: 1001 + 1100 = ------ 10101 L'ultima colonna presentava la somma di due 1, in questo caso si ha la generazione di un riporto che si propaga alla colonna successiva. Verifichiamo che il risultato sia giusto: 10101= 2^0 + 2^2 + 2^4 = 1 + 4 + 16 = 21 ==> CORRETTO 2) Sommare 10 = 2 a 1110 = 14. Ovviamente ci aspettiamo che tale somma valga 16. Siccome il primo addendo è più corto del secondo, bisogna aggiungergli a sinistra tanti 0 quanti servono per fargli assumere la lunghezza dell'altro addendo. Quindi ne mancano 2 e il primo addendo diventa 0010. Ora si può procedere: 0010 + 1110 = ------ 10000 In questo caso si nota la propagazione multipla del riporto, infatti nella seconda colonna si sommano due 1, quindi si ha come risultato 0 e la propagazione del riporto che va sommato all'1 già presente nella terza colonna, ancora una volta il risultato è 0 e si propaga il riporto... e così via. Il risultato è palesemente giusto perchè si ha un solo 1 in posizione numero 4, quindi la somma vale 2^4 = 16. SOTTRAZIONE: Il primo passo per sottrarre due numeri è quello di estendere il più corto come abbiamo visto nella somma. Poi bisogna applicare la codifica in complemento a 2 a quello che deve diventare negativo. Ed infine basta sommare ancora per colonne. Vediamo degli esempi: 1) Sottrarre 4 a 8 (ossia trovare il risultato di 8-4). Come prima cosa rappresentiamo i due numeri in binario: 8 = 1000 4 = 100 Estendiamo il 4 con lo zero mancante ===> 0100 Applichiamo la codifica in complemento a 2 al numero che dev'essere sottratto. Tale codifica impone di negare (ossia scrivere 0 al posto di 1 e 1 al posto di 0), a partire da sinistra, tutti i bit fino all'1 meno significativo ESCLUSO! 0100 ==CP2==> 1100 Sommiamo i due numeri per colonna: 1000 + 1100 = ------- 0100 Nella sottrazione non si considera l'ultimo riporto e il risultato ottenuto è palesemente giusto infatti 100 = 4. 2) Sottrarre 17 a 29 (ossia trovare il risultato di 29-17). Ci aspettiamo che il risultato sia 12 ossia 1100. Rappresentiamo i due numeri in forma binaria: 29 = 16 + 8 + 4 + 1 = 11101 17 = 16 + 1 = 10001 Avendo entrambi lunghezza 5, non bisogna estendere il numero di bit. Applichiamo la codifica in complemento a 2 al numero che dev'essere sottratto: 10001 ==CP2==> 01111 Sommiamo i due numeri così ottenuti: 11101 + 01111 = -------- 01100 Il numero ottenuto dalla somma è 01100 che corrisponde al 12 che ci attendavamo. NOTA: Nella sottrazione tra un numero positivo ed uno negativo non si incontrano grossi problemi, se invece si tenta di sottrarre tra di loro due numeri negativi si può incappare nel cosidetto UNDERFLOW. Consiste nell'ottenere un numero positivo dalla somma di due numeri negativi. Il caso speculare è l'OVERFLOW il quale consiste nell'ottenere un numero negativo dalla somma di due numeri positivi. Quando si verificano questi casi eccezionali, il risultato non va considerato e bisogna ripetere l'operazione utilizzando un numero maggiore di bit per rappresentare i due numeri di partenza.