scarica le dispense - Istituto Angioy Carbonia, Corso di Informatica

annuncio pubblicitario
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.
Scarica