ISTITUTO DI ISTRUZIONE SUPERIORE “G. M. ANGIOY” CARBONIA I SISTEMI DI NUMERAZIONE Prof. G. Ciaschetti Fin dall’antichità, l’uomo ha avuto il bisogno di rappresentare le quantità in modo simbolico. Sono nati così, in ogni diversa civiltà, i numeri. DEFINIZIONE: Un insieme di numeri con le possibili operazioni che su di essi è possibile fare è chiamato sistema di numerazione. Nel tempo, e nelle diverse civiltà, sono stati espressi diversi sistemi di numerazione: ad esempio, i romani non avevano il numero 0 e usavano il sistema che comprende i numeri I, II, III, IV, ecc.; oppure nella civiltà Maya si usavano i numeri ecc.; o ancora, in oriente ancora oggi usano un sistema che utilizza simboli come . A partire dall’anno 1000 circa, nella civiltà araba (e poi introdotti in Italia dal matematico Fibonacci nel 1223) si sviluppano i numeri 0, 1, 2, 3, ecc., che usiamo ancora oggi. Il sistema di numerazione decimale, che già conosciamo bene e che attualmente usa l’uomo occidentale, è composto dalle 10 cifre 0, 1, 2, 3, 4, 5, 6, 7, 8 e 9, e pertanto si dice che ha base 10. Inoltre, è un sistema posizionale: il valore di ogni cifra dipende dalla posizione nella quale la cifra viene scritta. Le diverse posizioni rappresentano successive potenze della base, ossia del 10. Facciamo qualche esempio: nel numero 235, la cifra più a destra vale 5, quella immediatamente alla sua sinistra vale 30, quella più a sinistra vale 200. Infatti, si ha la seguente equivalenza: 235 = 2 centinaia + 3 decine + 5 unità che si può anche scrivere nel seguente modo: 235 = 2*102 + 3*101 + 5*100 Notiamo dal precedente esempio che la posizione più a destra è la potenza “alla 0” della base, poi andando da destra verso sinistra, abbiamo la potenza “alla 1”, poi “alla seconda”, ecc. Facciamo un altro esempio per maggiore chiarezza: 4718 = 4 migliaia + 7 centinaia + 1 decina + 8 unità e cioè: 4718 = 4*103 +7*102 + 1*101 + 8*100 Ricordiamo sempre che il valore della la cifra più a destra è la “0-esima” potenza della base, cioè del 10 nel sistema decimale. Come vedremo tra poco, sarà così anche per gli altri sistemi di numerazione con base diversa dal 10. Il sistema binario Il computer non usa il sistema di numerazione decimale che usiamo noi uomini, ma piuttosto il sistema binario. Anche questo è un sistema di numerazione posizionale, ma ha solo due cifre, che sono 0 e 1. Quindi, il sistema binario ha base 2, e il valore di ogni cifra dipende dalla sua posizione. Una cifra binaria è chiamata un BIT (da BInary digiT). Ma quanto valgono le cifre? Se nel sistema di numerazione decimale le diverse posizioni rappresentano potenze del 10, nel sistema binario esse sono potenze del 2, essendo il sistema binario in base 2. Facciamo qualche esempio: 110 = 1*22 +1*21 +0*20 = 4 + 2 + 0 = 6 110000 = 1*25 +1*24 +0*23 +0*22 + 0*21 + 0*20 = 1*32 + 1*16 + 0*8 + 0*4 + 0*2 + 0*1 = 32 + 16 + 0 + 0 + 0 + 0 = 48 10011 = 1*24 +0*23 +0*22 + 1*21 + 1*20 = 1*16 + 0*8 + 0*4 + 1*2 + 1*1 = 16 + 1 = 19 Per distinguere se un numero è in base 10 o in base 2 (si noti, ad esempio, che il numero 101 può essere il numero cinque espresso in binario, oppure il numero centouno in decimale), si usa le seguente notazione: (numero)base. Così, ad esempio, il numero decimale centodieci lo scriviamo come (110)10 mentre il numero binario 110 lo scriviamo come (110)2. Riprendendo i due esempi di sopra, possiamo allora scrivere che (110000)2 = (48)10, mentre (10011)2 = (19)10. Inoltre, abbiamo imparato a convertire i numeri binari in numeri decimali! Basta infatti, proprio come abbiamo fatto negli esempi di sopra, vedere “quanto vale” il numero binario, sommando le cifre con il loro valore, che dipende dalla posizione. Questo procedimento può essere ripetuto per vedere “quanto vale” in decimale ogni numero binario. In generale, per ottenere da un numero binario l’equivalente numero decimale, basta vedere il valore delle singole cifre e sommare questi valori tra loro. Abbiamo così i numeri: (0)2 = 0*20 = (0)10 (1)2 = 1*20 = (1)10 (10)2 = 1*21 + 0*20 = 2 + 0 = (2)10 (11)2 = 1*21 + 1*20 = 2 + 1 = (3)10 (100)2 = 1*22 +0*21 + 0*20 = 4 + 0 + 0 = (4)10 (101)2 = 1*21 + 0*21 +1*20 = 4 + 0 + 1 = (5)10 (110)2 = 1*21 + 1*21 +0*20 = 4 + 2 + 0 = (6)10 (111)2 = 1*21 + 1*21 +1*20 = 4 + 2 + 1 = (7)10 (1000)2 = 1*23 +0*22 +0*21 + 0*20 = 8 + 0 + 0 + 0 = (8)10 (1001)2 = 1*23 +0*22 +0*21 +1*20 = 8 + 0 + 0 + 1 = (9)10 (1010)2 = 1*23 +0*22 +1*21 +0*20 = 8 + 0 + 1 + 0 = (10)10 (1011)2 = 1*23 +0*22 +1*21 +1*20 = 8 + 0 + 1 + 1 = (11)10 (1100)2 = 1*23 +1*22 +0*21 +0*20 = 8 + 4 + 0 + 0 = (11)10 e così via. Ora cerchiamo di allenare un po’ l’occhio, e andare più veloci nelle conversioni da binario a decimale: si noti che essendo le cifre binarie 0 e 1, ogni posizione può “non essere presa” quando la cifra è 0, oppure “essere presa una volta” quando la cifra è 1 (a differenza del sistema decimale, in cui ogni posizione può essere presa più volte: 3 centinaia, 4 decine, ecc.). Quindi, possiamo dire che ogni numero binario è formato da somme di potenze del 2. O meglio, scorrendo tutte le potenze del 2 dalla cifra meno significativa (quella più a destra, con esponente 0) fino a quella più significativa (quella più a sinistra, con l’esponente maggiore), avremo che alcune di esse “partecipano” (quando c’è 1) nel formare il numero, altre invece “non partecipano” (quando c’è 0). Di nuovo, facciamo qualche esempio, scrivendo il valore delle diverse posizioni sopra il numero: 8 4 2 1 (1011)2 = 8 + 2 + 1 = (11)10 16 8 4 2 1 (11000)2 = 16 + 8 = (24)10 Molto più semplice, no? Si provi, per esercizio, a convertire in decimale i seguenti numeri binari: (11100011)2, (100011)2, (1000100)2, (1111)2, (10101010)2 Verrebbe da chiedersi: ma perché complicarsi la vita con un diverso sistema di numerazione? Perché il computer usa il sistema binario, e non quello decimale? In realtà, se per noi umani è facile lavorare con 10 cifre, per il computer questo è difficilissimo: esso usa diversi livelli di tensione elettrica per rappresentare diversi numeri; per rappresentare una cifra binaria basta un solo livello di tensione (1 = c’è corrente, 0 = non c’è corrente), mentre per rappresentare una cifra decimale occorrerebbe distinguere 10 diversi livelli di tensione, cosa molto più difficile. Inoltre, come vedremo in seguito, è molto più facile per il computer effettuare le operazioni in binario piuttosto che in decimale, e anche lavorare con i numeri negativi! E’ per questo motivo che il computer è velocissimo: fare operazioni in binario è molto più semplice!!!! Prima di imparare a fare l’inverso di quanto abbiamo appreso finora, cioè convertire un numero decimale in binario, impariamo a contare in binario. Questo ci aiuterà nella conversione. Per contare in binario, dobbiamo sapere contare bene in decimale: sembra una ovvietà, ma dobbiamo capire bene il meccanismo che usiamo per contare. Iniziamo: 0 1 2 3 4 5 6 7 8 9 10 11 12 … 19 20 21 22 … 29 30 31 32 33 … 90 91 92 93 … 99 100 101 102 103 … 109 110 111 112 113 … 119 120 121 122 123 … 198 199 200 201 202 … 999 1000 Notiamo attentamente come avviene il conteggio: si parte con una sola cifra, e si aumenta il suo valore fino ad arrivare al 9 (il valore più grande nel sistema decimale). Il prossimo numero lo si ottiene aggiungendo un'altra cifra a sinistra, con valore 1, e rimettendo a 0 la cifra più a destra, cioè per fare il numero 10, che è pari alla base decimale, ci occorre prendere una decina, cioè una volta 101 e zero unità, cioè 0 volte 100. Si aumenta la cifra più a destra finché si può, cioè fino al 19, dopo di che per aggiungere un altro numero si aumenta quella a sinistra (due decine) e si rimette a zero quella a destra (zero unità). Abbiamo così il numero 20. Si procede in questo modo fino al 29, poi ancora una decina e si ottiene 30, e così via fino a 99. A questo punto, per aumentare ancora di uno, non essendo più possibile con due cifre, prendiamo una terza cifra (una centinaia, cioè una volta 102) e rimettiamo a 0 le due più a destra. Si ricomincia ad aumentare, finché si può, la cifra più a destra, ottenendo così 101, 102, …, 109, poi 110, 111, 112, e così via fino a 199. Per il prossimo numero serve ancora una centinaia, quindi prendiamo due volte 102 e ricominciamo con 0 alla sua destra, 200, 201, 202, … Facile, no? Vediamo ora in binario. Si utilizza lo stesso sistema: si aumenta la cifra più a destra finché si può, e quando non si può più, si aggiunge una cifra a sinistra, rimettendo a 0 quelle più a destra. Iniziamo con una sola cifra binaria, cioè un solo bit: (0)2 = 0*20 = (0)10 (1)2 = 1*20 = (1)10 ora una sola cifra non ci basta più, quindi ne aggiungiamo un’altra a sinistra, rimettendo a 0 quella a destra (10)2 = 1*21 + 0*20 = 2 + 0 = (2)10 (11)2 = 1*21 + 1*20 = 2 + 1 = (3)10 di nuovo, non possiamo aumentare più, quindi aggiungiamo un’altra cifra a sinistra, e rimettiamo a zero quelle a destra (100)2 = 1*22 +0*21 + 0*20 = 4 + 0 + 0 = (4)10 (101)2 = 1*21 + 0*21 +1*20 = 4 + 0 + 1 = (5)10 non è più possibile aumentare quella più a destra, quindi si passa a (110)2 = 1*21 + 1*21 +0*20 = 4 + 2 + 0 = (6)10 (111)2 = 1*21 + 1*21 +1*20 = 4 + 2 + 1 = (7)10 e così via, ottenendo (1000)2 = 1*23 +0*22 +0*21 + 0*20 = 8 + 0 + 0 + 0 = (8)10 (1001)2 = 1*23 +0*22 +0*21 +1*20 = 8 + 0 + 0 + 1 = (9)10 (1010)2 = 1*23 +0*22 +1*21 +0*20 = 8 + 0 + 1 + 0 = (10)10 (1011)2 = 1*23 +0*22 +1*21 +1*20 = 8 + 0 + 1 + 1 = (11)10 (1100)2 = 1*23 +1*22 +0*21 +0*20 = 8 + 4 + 0 + 0 = (12)10 (1101)2 = 1*23 +1*22 +0*21 +1*20 = 8 + 4 + 0 + 1 = (13)10 (1110)2 = 1*23 +1*22 +1*21 +0*20 = 8 + 4 + 1 + 0 = (14)10 (1111)2 = 1*23 +1*22 +1*21 +1*20 = 8 + 4 + 2 + 1 = (15)10 E così via. Chiaro? Ora notiamo una cosa: se ad esempio prendiamo il numero (10000)2, il numero precedente è (1111)2. Infatti, abbiamo (10000)2 = 1*24 +0*23 +0*22 +0*21 +0*20 = 16 + 0 + 0 + 0 + 0 = (16)10 (1111)2 = 1*23 +1*22 +1*21 +1*20 = 8 + 4 + 2 + 1 = (15)10 Possiamo allora dire che per formare il numero decimale 15, ci servono in binario 4 bit, tutti messi a 1. Per formare il numero decimale 16, invece, ci servono 5 bit, di cui il più significativo (il più a sinistra) è 1, e gli altri sono tutti 0. Non esiste altro modo di fare il numero 16, e non esiste altro modo di fare il numero 15. Lo stesso vale per tutti gli altri numeri. In generale, con un solo bit facciamo i numeri da 0 a 1, con due bit i numeri da 0 a 3, con tre bit i numeri da 0 a 7, con 4 bit i numeri da 0 a 15, e così via. Riprenderemo in un’altra dispensa questa caratteristica dei numeri binari. Ora che sappiamo contare in binario, ritorniamo alle conversioni, e vogliamo convertire un numero decimale in binario: esiste un metodo “a occhio”, che è molto rapido, e un metodo “meccanico” che è più lento ma non richiede un grande sforzo mentale. - metodo “a occhio” supponiamo di voler convertire in binario, ad esempio, il numero (23)10. Sapendo che un numero binario è formato da somme di potenze del 2, ci chiediamo quali servono: elenchiamole (non tutte, non serve andare troppo oltre): 64 32 16 8 4 2 1 dobbiamo decidere quali prendere e quali no per formare il nostro (23)10. Appare evidente che il 64 e il 32 sono troppo grandi, quindi non vanno presi, come tutte le potenze superiori. Il numero 16 invece va preso, perché se non lo prendessimo, con i rimanenti potremmo formare al massimo il numero 15. Ora, abbiamo 16 nel nostro carniere, manca ancora 7 per arrivare a 23. Ripetendo il ragionamento appena fatto, l’8 non lo prendiamo, mentre prendiamo il 4, il 2 e l’1. Abbiamo la seguente situazione: 64 32 16 8 4 2 1 e sapendo che “0 = non lo prendo” e “1 = lo prendo”, otteniamo il numero binario 0 0 1 0 1 1 1 Si noti che gli 0 più a sinistra possono essere tolti perché non danno valore al numero, come accade anche in decimale: se mi danno 50 Euro oppure 00050 Euro, è la stessa cosa!. Facciamo la conversione contraria, per vedere se torna: (10111)2 = 1*24 +0*23 +1*22 +1*21 +1*20 = 16 + 0 + 4 + 2 + 1 = (23)10 Perfetto! - metodo “meccanico” Il metodo appena visto è semplice e di rapida esecuzione. Ma che succede se qualcuno ci chiede di convertire in binario il numero 776324? Non è così facile! Un modo per effettuare le conversioni in modo da non scervellarsi troppo è quello di dividere ripetutamente il numero per 2, fino a quando si ha un quoziente nullo, e prendere i resti della divisione in ordine inverso. Facciamo un esempio, ancora con il numero (23)10: 23:2 = 11 con resto 1 11:2 = 5 con resto 1 5:2 = 2 con resto 1 2:2 = 1 con resto 0 1:2 = 0 con resto 1 Ci fermiamo quando il quoziente della divisione diventa nullo. Prendendo i resti in ordine inverso, abbiamo il numero in binario: (10111)2 Facciamo un’altra conversione, giusto per allenarci un po’: vogliamo sapere come diventa in binario il numero decimale (58)10. 58:2 = 29 con resto 0 29:2 = 14 con resto 1 14:2 = 7 con resto 0 7:2 = 3 con resto 1 3:2 = 1 con resto 1 1:2 = 0 con resto 1 il numero ottenuto è allora (111010)2. Facciamo la conversione contraria per accertarci che tutto sia esatto: (111010)2 = 1*25 +1*24 +1*23 +0*22 +1*21 +0*20 = 32 + 16 + 8 + 0 + 2 + 0 = (58)10 Abbiamo imparato a convertire un numero da decimale a binario, e viceversa! Si provi, per esercizio, a convertire in binario i numeri (34)10, (82)10, (71)10, (109)10. Operazioni nel sistema binario Come nel sistema decimale, nel sistema binario è possibile effettuare le operazioni di addizione, sottrazione, moltiplicazione e divisione. Noi impareremo qui solo le prime due, poiché il computer fa le moltiplicazioni e le divisioni compiendo addizioni e sottrazioni ripetute. Infatti, abbiamo ad esempio per la moltiplicazione: 5*7 = 5 + 5 + 5 + 5 + 5 + 5 + 5 (7 volte) = 35 mentre per la divisione abbiamo 25/3 25 – 3 22 – 3 19 – 3 16 – 3 14 – 3 11 – 3 8 – 3 5 – 3 2 – 3 -1 (siamo riusciti 8 volte a togliere 3 da 25) da cui otteniamo 25/3 = 8. Si noti che così possiamo trovare il quoziente della divisione, e non la divisione esatta, poiché stiamo parlando di numeri interi, cioè senza parte decimale. Somma tra numeri binari Per effettuare la somma tra due numeri binari, si procede come per la somma tra numeri decimali, mettendo i numeri in colonna e sommando cifra a cifra, partendo da destra, con la seguente regola: 0+0=0 0+1=1 1+0=1 1 + 1 = 0 con riporto di 1 Facciamo qualche prova di esempio (abbiamo scritto in piccolo i riporti in alto): 1111 (101101)2 + (45)10 + ( 111)2 = (7)10 = _____________ _____________ (110100)2 (52)10 partendo dalla cifra più a destra, troviamo 1 + 1: seguendo la regola, scriviamo 0 e riportiamo 1. Procedendo a sinistra, troviamo 1 + 0 + 1 (includendo il riporto), che fa 2, cioè 10 in binario, quindi di nuovo scriviamo 0 e riportiamo 1. Ancora più a sinistra: troviamo 1 + 1 + 1 (compreso il riporto), cioè 3, che in binario è 11. Quindi, scriviamo 1 e riportiamo 1. Andando ancora a sinistra, troviamo 1 + 0, quindi scriviamo 1. I restanti bit del primo numero li riscriviamo come sono, visto che è come se nel secondo numero ci fosse 0. Facciamo un altro esempio: 111 (1111)2 + ( 101)2 = _____________ (10100)2 (15)10 + (5)10 = _____________ (20)10 partendo dalla cifra più a destra, troviamo 1 + 1: seguendo la regola, scriviamo 0 e riportiamo 1. Procedendo a sinistra, troviamo 1 + 1 + 0 (includendo il riporto), che fa 2, cioè 10 in binario, quindi di nuovo scriviamo 0 e riportiamo 1. Ancora più a sinistra: troviamo 1 + 1 + 1 (compreso il riporto), cioè 3, che in binario è 11. Quindi, scriviamo 1 e riportiamo 1. Andando ancora a sinistra, troviamo 1 + 1, quindi scriviamo 0 e riportiamo 1. Sottrazione tra numeri binari Come per la somma, per effettuare la sottrazione tra due numeri binari, si procede come per la sottrazione tra numeri decimali, mettendo i numeri in colonna e sottraendo cifra a cifra, partendo da destra, con la seguente regola: 0-0=0 0 - 1 = 1 con prestito di 1 1-0=1 1-1=0 Facciamo qualche prova di esempio: (1111)2 ( 101)2 = _____________ (1010)2 (15)10 (5)10 = _____________ (10)10 partendo dalla cifra più a destra, troviamo 1 – 1, quindi scriviamo 0. Andando a sinistra, troviamo 1 – 0, per cui scriviamo 1. Poi troviamo di nuovo 1 – 1, e scriviamo 0, e infine troviamo 1 – 0 e scriviamo 1. Ora facciamo un altro esempio con i prestiti: 0 (1101)2 - (13)10 - (11)2 = (3)10 = _____________ (1010)2 _____________ (10)10 partendo dalla cifra più a destra, troviamo 1 – 1, quindi scriviamo 0. Andando a sinistra, troviamo 0 – 1, per cui scriviamo 1 e prendiamo un 1 in prestito a sinistra (l’1 diventa perciò 0). Procedendo, otteniamo il nostro risultato. Ancora un altro esempio, in decimale stavolta: 99 (1000)10 - (7)10 = _____________ (993)10 Osserviamo che non avendo trovato prestito immediatamente a sinistra, siamo andati a prendere il prestito ancora più a sinistra, dove ce n’era. Di conseguenza, avendo tolto 1 a 100, quello che resta è 99. Succede lo stesso anche in binario, come si può osservare dal seguente esempio: 11 (10001)2 - (17)10 - (11)2 = (3)10 = _____________ (1110)2 _____________ (14)10 partendo dalla cifra più a destra, troviamo 1 – 1, quindi scriviamo 0. Andando a sinistra, troviamo 0 – 1, quindi scriviamo 1 e andiamo a cercare un 1 in prestito a sinistra. Lo troviamo dopo qualche posizione. Ragionando come l’esempio precedente, abbiamo tolto 1 dal numero binario 100, quello che resta è 11. Chiaro? Altri sistemi di numerazione: il sistema ottale Nel computer, spesso accade di dover indicare i bit a gruppi di 3. Nasce così una rappresentazione ottale dei numeri. Anche questo è un sistema di numerazione posizionale, ma ha otto cifre, che sono 0, 1, 2, 3, 4, 5, 6 e 7. Quindi, il sistema ottale ha base 8, e il valore di ogni cifra dipende dalla sua posizione. Ma quanto valgono le cifre? Se nel sistema di numerazione decimale le diverse posizioni rappresentano potenze del 10, nel sistema binario invece potenze del 2, nel sistema ottale esse rappresentano potenze dell’8. Facciamo qualche esempio: (541)8 = 5*82 + 4*81 + 1*80 = 5*64 + 4*8 + 1*1 = 320 + 32 + 1 = (353)10 (1147)8 = 1*83 +1*82 + 2*81 + 7*80 = 1*512 + 1*64 + 2*8 + 7*1= 512 + 64 + 32 + 7 = (615)10 Come prima, abbiamo imparato a convertire un numero ottale in un numero decimale! Per fare la conversione inversa, si procede allo stesso modo della conversione da decimale a binario, solo che stavolta la base è 8 e non 2: allora, si divide per 8 ripetutamente, fino a che si raggiunge un quoziente nullo, e si prendono i resti della divisione (che vanno da 0 a 7, quindi cifre ottali) in ordine inverso. Facciamo un esempio: vogliamo convertire in ottale il numero (187)10: 187:8 = 23 con resto 3 23:8 = 2 con resto 7 2:8 = 0 con resto 2 Il numero ottale ottenuto è allora (273)8. Facciamo la conversione contraria per la prova: (273)8 = 2*82 + 7*81 + 3*80 = 2*64 + 7*8 + 3*1 = 128 + 56 + 3 = (187)10 Fantastico, ora sappiamo anche convertire un numero decimale in un numero ottale! All’inizio di questo paragrafo, abbiamo accennato al fatto che il sistema ottale nasce dalla necessità di dover indicare, nel computer, i bit a gruppi di 3. Infatti, ogni computer lavora con parole che hanno un numero fissato di bit, e ci sono (ma al giorno d’oggi forse sono un po’ obsoleti) computer che hanno parole di 3 bit! Ma cosa c’entrano i bit, cioè le cifre binarie, con le cifre ottali? E perché gruppi di 3 bit? Osserviamo che per fare una cifra ottale, bastano 3 bit. Infatti, abbiamo: binario ottale decimale 000 0 0 001 1 1 010 2 2 011 3 3 100 4 4 101 5 5 110 6 6 111 7 7 1000 10 8 1001 11 9 1010 12 10 1011 13 11 1100 14 12 1101 15 13 1110 16 14 e così via. Come si vede, c’è una stretta relazione tra un gruppo di 3 bit e una cifra ottale: Ogni gruppo di 3 bit corrisponde a una cifra ottale, e viceversa, ogni cifra ottale corrisponde a un gruppo di 3 bit! Sfruttando questa osservazione, possiamo imparare a convertire un numero binario in ottale, e viceversa. Basta sostituire a ogni cifra ottale un gruppo di 3 bit, e a ogni gruppo di 3 bit una cifra ottale nella conversione inversa. Facciamo qualche esempio: vogliamo convertire in binario il numero (613)8. Poiché risulta, su 3 bit, 6 = 110 1 = 001 3 = 011 otteniamo il numero binario (110-001-011), cioè (110001011)2. Ancora un esempio, stavolta al contrario, convertiamo un numero da binario a ottale: vogliamo convertire in ottale il numero (11101)2. Procediamo, come prima, raggruppando i bit a gruppi di 3 (partendo da destra), e trasformando ogni gruppo nella corrispondente cifra ottale. Risultano due gruppi di 3 bit, cioè (11-101), e poiché abbiamo 101 = 5 11 = 3 (è come se fosse 011) otteniamo il numero ottale (35)8. Per prova, si convertano i seguenti numeri decimali in ottale, e si faccia poi la conversione inversa per verifica: (43)10, (121)10, (56)10, (77)10. Il sistema esadecimale Oltre che a gruppi di 3 bit, spesso accade nel mondo dei computer di dover raggruppare i bit a gruppi di 4. Nasce così il sistema di numerazione esadecimale. Anche questo è un sistema di numerazione posizionale, ma ha sedici cifre, che sono tutte le cifre del sistema decimale da 0 a 9, più le lettere A, B, C, D, E, F, che rappresentano rispettivamente i numeri 10, 11, 12, 13, 14 e 15. Quindi, il sistema esadecimale ha base 16, e come negli altri sistemi posizionali, il valore di ogni cifra dipende dalla sua posizione. Come è lecito aspettarsi a questo punto, le diverse posizioni rappresentano nel sistema esadecimale potenze del 16. Facciamo qualche esempio: (2F)16 = 2*161 + 15*160 = 2*16 + 15*1 = 32 + 15 = (47)10 (A3B) 16 = 10*162 +3*161 + 11*160 = 10*256 + 3*16 + 11*1 = 2560 + 48 + 11 = (2619)10 (125)16 = 1*162 +2*161 + 5*160 = 1*256 + 2*16 + 5*1 = 256 + 32 + 5 = (293)10 Come prima, abbiamo imparato a convertire un numero esadecimale in un numero decimale! Dobbiamo solo stare attenti a ricordarci che A = 10, B = 11, C = 12, D = 13, E = 14 e F = 15. Per fare la conversione inversa, cioè convertire un numero da decimale a esadecimale, si procede con il metodo delle divisioni successive, così come abbiamo fatto per le conversioni di numeri decimali in binario e in ottale: si divide per 16 ripetutamente, fino a che si raggiunge un quoziente nullo, e si prendono i resti della divisione (che vanno da 0 a 15, quindi cifre esadecimali, stando attenti a sostituire i numeri superiori al 9 con le lettere opportune) in ordine inverso. Facciamo un esempio: vogliamo convertire in esadecimale il numero (194)10: 194:16 = 12 con resto 2 12:16 = 0 con resto 12 C Il numero esadecimale ottenuto è allora (C2)16. Facciamo la conversione inversa per la prova: (C2)16 = 12*161 + 2*160 = 12*16 + 2*1 = 192 + 2 = (194)10 Ora sappiamo convertire un numero decimale in un numero esadecimale! Come abbiamo accennato all’inizio di questo paragrafo, il sistema esadecimale nasce della necessità di raggruppare i bit in gruppi di 4, quindi ci aspettiamo di poter trasformare un numero da esadecimale a binario sostituendo ogni cifra esadecimale con il corrispondente gruppo di 4 bit, e viceversa, così come accadeva per il sistema ottale con gruppi di 3 bit. Infatti, se riprendiamo la tabella precedente, notiamo che serve un gruppo di 4 bit per formare una cifra esadecimale. binario esadecimale decimale 0000 0 0 0001 1 1 0010 2 2 0011 3 3 0100 4 4 0101 5 5 0110 6 6 0111 7 7 1000 8 8 1001 9 9 1010 A 10 1011 B 11 1100 C 12 1101 D 13 1110 E 14 1111 F 15 10000 10 16 10001 11 17 10010 12 18 10011 13 19 Sfruttando questa osservazione, possiamo imparare a convertire un numero binario in esadecimale, e viceversa, semplicemente sostituendo a ogni cifra esadecimale un gruppo di 4 bit, e a ogni gruppo di 4 bit una cifra esadecimale nella conversione inversa. Facciamo qualche esempio: vogliamo convertire in binario il numero (C3)16. Poiché risulta, su 4 bit, C = 1100 3 = 0011 otteniamo il numero binario (1100-0011), cioè (11000011)2. Ancora un esempio, stavolta al contrario, convertiamo un numero da binario a esadecimale: vogliamo convertire in esadecimale il numero (11101)2. Procediamo, come prima, raggruppando i bit a gruppi di 4 (partendo da destra), e trasformando ogni gruppo nella corrispondente cifra esadecimale. Risultano due gruppi di 4 bit, cioè (1-1101), e poiché abbiamo 0001 = 1 1101 = 13 = D otteniamo il numero esadecimale (1D)16. Per prova, convertiamo in decimale i due numeri: (11101)2 = 1*24 + 1*23 + 1*22 + 0*21 + 1*20 = 16 + 8 + 4 + 1 = (29)10. (1D)16 = 1*161 + 13*160 = 16 + 13 = (29)10.