# I Sistemi di Numerazione (superiori)
## La scrittura in base 10

Il nostro sistema di numerazione è il sistema decimale. Ciò ha probabilmente origine dal fatto che abbiamo 10 dita. Forse se fossimo nati ragni avremmo contato fino ad otto ed useremo un sistema di numerazione ottale, se fossimo nati gatti avremmo contato fino a 4 e useremo un sistema quattrale, millepiedi fino a mille. Come conta un computer? Un computer ragiona sulla base di soli due stati, passa corrente (acceso) o non passa corrente (spento): è come se avesse due dita. Tutti i sistemi che oggi usiamo nell'informatica utilizzano una logica a due stati: i circuiti elettrici possono trovarsi nello stato di acceso o di spento, i dischi magnetici dell'hard disk sono composti da microscopici magneti ognuno dei quali può essere magnetizzato in un verso o nel verso opposto, i dischi ottici come i CD-ROM e i DVD memorizzano le informazioni al loro interno come se contenessero tanti microscopici specchi ognuno dei quali riflette la luce oppure no. Nell'antichità si usava uno strumento chiamato abaco. Gli abachi erano tavolette suddivise in colonne su cui si spalmavano cera o sabbia e si incidevano segni o si mettevano sassolini. Per contare un certo numero di oggetti e ricordarci quanti sono, utilizziamo un abaco:
Cominciamo a contare con le mani: per ogni raggruppamento di 10 segniamo un'unità di ordine superiore, fino a contare tutti gli elementi del nostro insieme. Le unità che rimangono, perché non riescono a formare un raggruppamento di 10, vengono segnate con la cifra che le rappresenta: nel nostro caso 3. Passiamo all'unità di ordine superiore: le decine. Anche con queste formiamo raggruppamenti di 10, se ci riusciamo. Ogni raggruppamento forma un'unità di ordine superiore, se rimangono elementi che non si raggruppano essi rappresentano le decine. Se non rimane alcuna unità scriviamo 0. Nel nostro caso, ci sono 12 decine, 10 formano un'unità di ordine superiore (centinaia) e 2 restano decine. Il procedimento continua finché non abbiamo finito di contare tutti gli elementi. Nel nostro esempio finiamo dopo aver formato un'unità di ordine superiore, le centinaia. Il nostro numero è 123. Ovviamente i numeri 123 e 312 sono due numeri diversi anche se composti dalle stesse cifre, sono diversi perché la posizione delle cifre che li compongono è differente. Ad esempio, la cifra 1, che in 123 è nella posizione più a sinistra, si trova al centro del numero 312.
Dunque, in generale, il valore attribuito alle varie cifre non dipende soltanto dalla specifica cifra considerata ma anche dalla posizione che essa occupa all'interno del numero. Il sistema di numerazione che solitamente usiamo è dunque un sistema posizionale. È chiamato decimale o a base dieci perché dieci unità di un determinato ordine sono rappresentate da un'unità di ordine superiore.
DEFINIZIONE 1. Si definisce base di un sistema di numerazione il numero di simboli, cifre, usati per rappresentare i valori. La potenza della base indica il peso (la posizione) che i simboli hanno all'interno della scrittura del numero.
Riassumendo, abbiamo una serie di dieci simboli: 0, 1, 2, 3, 4, 5, 6, 7, 8 e 9 che rappresentano il numero delle unità di un determinato ordine. Il significato dei simboli dipende anche dalla posizione che assumono nella “parola” che rappresenta un numero. Ad esempio: 1846 = 1 * (1000) + 8 * (100) + 4 * (10) + 6 * (1), che scritto con le potenze di 10 diventa: 1846 = 1 * (10)$^3$ + 8 * (10)$^2$ + 4 * (10)$^1$ + 6 * (10)$^0$. L'esponente del peso attribuito ad ogni cifra che compone la scrittura di un numero rappresenta la posizione della cifra a partire da quella più a destra (0) cioè la meno significativa, quindi ne denota l'ordine di importanza.
DEFINIZIONE 2. La scrittura di un numero come somma delle cifre moltiplicate per le potenze della base si chiama notazione polinomiale.
Una volta compreso il meccanismo su cui si basa il sistema di numerazione decimale, cioè a base 10, il procedimento si può estendere ad una base qualunque. Se B è la base di un sistema di numerazione, B unità di un certo ordine vengono rappresentate da un'unità dell'ordine immediatamente superiore. In questo modo si può costruire un sistema di numerazione con qualsiasi base maggiore di 1.

## Scrittura di un numero in una base qualsiasi

Il procedimento usato per scrivere un numero in base 10 può essere usato per scrivere un numero in una base qualsiasi.
ESEMPIO 1. Contare 29 oggetti in base 5.
Utilizziamo un abaco, ma anziché contare per dieci contiamo per cinque. Invece di raggruppare per unità, decine, decine di decine (centinaia) e così via, conteremo raggruppando per unità, per cinquine, per cinquine di cinquine (venticinquine) e così via.
Il numero rappresentato nell'abaco si scrive (104)$_5$ e si legge “uno-zero-quattro in base cinque” per distinguerlo da centoquattro scritto in base 10, che sarebbe 104 ovvero (104)$_{10}$. Per ottenere il numero decimale che corrisponde al numero scritto in base 5 occorre sviluppare il numero in base 5 nella sua scrittura polinomiale: (104)$_5$ = 1 * 5$^2$ + 0 * 5$^1$ + 4 * 5$^0$ = 25 + 0 + 4 = (29)$_{10}$.
ESEMPIO 2. Contare 29 oggetti in base 3.
Questa volta contiamo per tre. Il numero ottenuto si scrive (1002)$_3$ e si legge “unozero-zero-due in base tre” per distinguerlo da milledue scritto in base 10. Per ottenere il numero decimale corrispondente, occorre sviluppare il numero in base 3 nella sua scrittura polinomiale.
(1002)$_3$ = 1 * 3$^3$ + 0 * 3$^2$ + 0 * 3$^1$ + 2 * 5$^0$ = 27 + 0 + 0 + 2 = (29)$_{10}$.
In accordo con la DEFINIZIONE 1, negli esempi abbiamo visto che i simboli che occorrono per scrivere un numero in base 10 sono dieci {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, quelli necessari per scrivere un numero in base 5 sono cinque {0, 1, 2, 3, 4}, quelli necessari per scrivere un numero in base 3 sono tre {0, 1, 2}. Analogamente, i simboli che serviranno per scrivere un numero in base 2 sono due {0, 1}. Possiamo scrivere i numeri anche in una base superiore a 10. Una base molto usata in informatica, insieme alla base 2, è la base esadecimale, cioè la base 16. In questo caso, per contare devo fare raggruppamenti di 16; sono perciò necessari 16 simboli per indicare questi raggruppamenti, che rappresentano i valori da 0 a 15. Pertanto occorrono dei simboli in più rispetto a quelli utilizzati dal sistema di numerazione decimale, che servono per rappresentare i valori 10, 11, 12, 13, 14, 15. Convenzionalmente si usano i simboli seguenti:
* (A)$_{16}$ = (10)$_{10}$.
* (B)$_{16}$ = (11)$_{10}$.
* (C)$_{16}$ = (12)$_{10}$.
* (D)$_{16}$ = (13)$_{10}$.
* (E)$_{16}$ = (14)$_{10}$.
* (F)$_{16}$ = (15)$_{10}$.
Quindi i numeri esadecimali, in ordine crescente, sono: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, 10, 11, 12, 13, 14 ,15, . . .

### Convertire un numero da una base diversa da 10 a base 10

Per scrivere un numero da una base diversa da 10 a base 10 bisogna svilupparlo nella sua forma polinomiale. Se (x)$_B$ è un numero qualsiasi scritto nella base B e se a$_n$a$_{n-1}$ . . . a$_2$a$_1$a$_0$ sono le cifre che compongono la sua rappresentazione, da quella più significativa (con peso B$^n$) a quella meno significativa (con peso B$^0$ = 1), avremo:
(x)$_{10}$ = a$_n$ * B$^n$ + a$_{n-1}$ * B$^{n-1}$ + ... + a$_2$ * B$^2$ + a$_1$ * B$^1$ + a$_0$ * B$^0$.

### Convertire un numero da base 10 a una base diversa da 10

Abbiamo visto che per contare e scrivere un numero in una base diversa da dieci, per esempio (29)$_{10}$ in base 3, dobbiamo raggruppare per 3. Raggruppare per 3 ha lo stesso significato che dividere per 3. Nella prima divisione per tre il quoziente indica quante terzine otteniamo, mentre il resto indica quante unità (di ordine 0) verranno considerate.
Nel nostro esempio si ottengono 29/3 = 9 terzine, mentre rimangono 2 unità (di ordine 0). Il 2 sarà il primo numero a destra che verrà considerato. Con 9 terzine si ottengono 9/3 = 3 terzine di terzine (novine) con resto 0.
Questo 0 diventa la cifra che scriviamo a sinistra del 2. Con 3 terzine di terzine otteniamo una terzina di terzina di terzina (ventisettina), mentre rimangono 0 terzine di terzine. Questo 0 diventa il numero che scriviamo a sinistra dello 0 precedente. Ora, 1 : 3 dà come quoziente 0 (terzine di quarto ordine) con resto 1. Qui ci fermiamo e scriviamo 1 a sinistra dello 0 trovato precedentemente.
Il numero si compone da sinistra verso destra con le cifre dei vari resti nell'ordine opposto a quello nel quale sono stati ottenuti. Si ha così (29)$_{10}$ = (1002)$_3$. Controlliamo con la notazione polinomiale: 1 * 3$^3$ + 0 * 3$^2$ + 0 * 3$^1$ + 2 * 3$^0$ = 27 + 2 = 29.
ESEMPIO 3. Convertire nel sistema binario (in base 2) il numero 59.
Dividiamo successivamente 59 per 2 fino a che non otteniamo zero come quoziente e prendiamo come risultato della conversione la successione dei resti partendo dall'ultimo ottenuto. Il numero 59 scritto in base 2 sarà pertanto (111011)$_2$. Verifichiamo con la scrittura polinomiale: 1 * 2$^5$ + 1 * 2$^4$ + 1 * 2$^3$ + 0 * 2$^2$ + 1 * 2$^1$ + 1 * 2$^0$ = 32 + 16 + 8 + 2 + 1 = 59.
ESEMPIO 4. Trasforma 315 da base 10 a base 3, 4 e 5.
Un altro metodo per trasformare un numero decimale in un numero binario
Per trasformare i numeri da base 10 a base 2 basta scrivere il numero come somma delle potenze del 2:
* A. Si parte dalla potenza del 2 più vicina, per difetto, al numero da convertire.
* B. Si vede se la potenza precedente di ordine inferiore può fare parte della sequenza, cioè se la somma tra le potenze non diventa più grande del numero. Se può farne parte allora si scrive 1, altrimenti 0.
* C. Si prosegue in questo modo fino ad arrivare a 20.
* D. La sequenza di 1 e 0 nell'ordine ottenute sono le cifre che, da sinistra verso destra, rappresentano il numero binario corrispondente.
ESEMPIO 5. Consideriamo ancora il numero 59:
* Qual è la potenza del 2 più vicina, per difetto, al numero 59? È 32, cioè 2$^5$. Quindi 2$^5$ fa parte del numero binario. Scrivo 1 come primo numero della sequenza.
* Vediamo ora 2$^4$ = 16. Anche 16 può far parte del numero binario perché 32 + 16 = 48 che è minore di 59. Segno 1 come secondo numero della sequenza.
* Per lo stesso ragionamento anche 2$^3$ = 8 fa parte del numero binario. Infatti 32 + 16 + 8 = 56 è minore di 59. Segno ancora 1 come terzo numero della sequenza.
* Invece 2$^2$ = 4 non può farne parte perché 32 + 16 + 8 + 4 = 60 è maggiore di 59. Segno 0 come quarto numero della sequenza.
* 21 = 2 E 20 = 1 vanno bene e si arriva al totale voluto 59. Segno 1 come quinto e 1 come
sesto numero della sequenza. Riassumendo: 59 = 1 * 2$^5$ + 1 * 2$^4$ + 1 * 2$^3$ + 0 * 2$^2$ + 1 * 2$^1$ + 1 * 2$^0$ = (111011)$_2$.

## Conversione di un numero da una base diversa da 10 a un'altra base diversa da 10

ESEMPIO 6. Scrivere il numero (1023)$_4$ in base 7. Per scrivere un numero da una base B a una base K entrambe diverse da 10 occorre:
* A. Trasformare il numero in base B in un numero decimale attraverso la sua scrittura polinomiale.
(1023)$_4$ = 1 * 4$^3$ + 0 * 4$^2$ + 2 * 4$^1$ + 3 * 4$^0$ = 64 + 0 + 8 + 3 = (75)$_{10}$.
* B. Trasformare il numero decimale nella base K attraverso i resti delle divisioni successive per K presi nell'ordine opposto a quello nel quale sono stati ottenuti.
Le trasformazioni eseguite sono quindi: (1023)$_4$ ---> (75)$_{10}$ ---> (135)$_7$.

### Conversione tra base 4, base 8, base 16 e base 2

Consideriamo il numero scritto in base 2 (11010011100101)$_2$. Vogliamo scriverlo in base 4, in base 8, in base 16 senza passare dalla sua scrittura in base 10. Notiamo che gruppi di due cifre in base 2 rappresentano tutte le cifre della base 4, gruppi di 3 cifre in base 2 rappresentano tutte le cifre della base 8 e gruppi di 4 cifre nella base 2 rappresentano tutte le cifre della base 16, come indicato nella seguente tabella.
Da base 2 a base 4. Dobbiamo raggruppare il numero scritto in base 2 in gruppi di due cifre, partendo da destra, e tradurre il valore di ogni singolo gruppo con la corrispondente cifra in base 4.
Da base 2 a base 8. Dobbiamo raggruppare il numero scritto in base 2 in gruppi di tre cifre, partendo da destra, e tradurre il valore di ogni singolo gruppo con la corrispondente cifra in base 8.
Da base 2 a base 16. Dobbiamo raggruppare il numero scritto in base 2 in gruppi di quattro cifre, partendo da destra, e tradurre il valore di ogni singolo gruppo con la corrispondente cifra in base 16.
Perché è importante la base 2?
Tutti gli strumenti elettronici che utilizziamo hanno bisogno di tradurre le informazioni che inseriamo in stati fisici della macchina. Dal punto di vista tecnico oggi usiamo dispositivi elettrici, magnetici, ottici che sono bistabili, ossia assumono due stati fisici differenti e il metodo più semplice e più efficiente per tradurre in “linguaggio macchina” le nostre informazioni è utilizzare la base 2: composta solo dai simboli 0 e 1. La base due è quindi l'alfabeto a disposizione delle macchine per comprendere e rispondere alle nostre richieste. Se si utilizzasse la base 10 dovremo far riconoscere dall'apparato dieci differenti simboli che dovrebbero essere tradotti in altrettanti stati differenti di dispositivi fisici. A partire da questa informazione elementare detta bit (compressione dall'inglese di binary digit) è possibile costruire informazioni più complesse sotto forma di sequenze finite di zero e di uno. Attraverso la codifica binaria si è in grado di rappresentare caratteri, numeri, istruzioni di programmi ma anche immagini, suoni e video. Tutte le informazioni gestite da un computer sono quindi numeri in forma binaria. Il primo multiplo del bit è il byte che è formato da una sequenza di 8 bit:
0 1 0 1 0 0 0 0
Con una sequenza di 8 bit possiamo codificare, per mezzo del codice ASCII (Acronimo di American Standard Code for Information Interchange. Si tratta di un codice standard utilizzato dalla maggior parte dei sistemi elettronici per associare ogni lettera alfanumerica a un valore numerico.), fino a 256 caratteri. Quando digitiamo un carattere sulla tastiera del calcolatore inviamo in realtà una sequenza di 8 bit. Vediamo alcuni esempi della codifica binaria dei caratteri (codice ASCII).
Anche il byte ha i suoi multipli. Eccone alcuni indicati nelle seguenti tabelle.
OSSERVAZIONE. È noto che i prefissi kilo-, mega- e giga- corrispondono a 1000, 1000000 (un milione) e 1000000000 (un miliardo), mentre nell'informatica vengono impropriamente usati per indicare particolari potenze di 2 (kibi-, mebi- e gibi-). Tutto questo genera confusione e i produttori giocano su questa differenza, facendo i conti con i multipli decimali, “imbrogliando”. Un PC che viene dichiarato, ad esempio, con un hard disk da 160GB ha a disposizione 160 * 10$^9$ byte che risultano essere 160 * (10$^9$/2$^{30}$) = 160 * 0,931322575 ≈ 149GiB. Ma il PC gestisce i multipli binari, ovvero i GiB, e quindi mostra all'utente un disco da 149GiB. Ecco che ci siamo “persi” circa 160 - 149 = 11GiB.

## Operazioni in base diversa da dieci

Le quattro operazioni con i numeri in base diversa da dieci possono effettuarsi con gli stessi algoritmi utilizzati per i numeri naturali.

### Addizione

ESEMPIO 7. Eseguire l'addizione in base 2 tra 101011$_2$ e 10011$_2$.
Dobbiamo tradurre in base due quello che facciamo in base dieci. Abbiamo perciò bisogno di costruire la tavola di addizione in base due che riportiamo a lato. La tavola, o tabellina, è piuttosto semplice, bisogna solo fare attenzione che in base due si ha 1 + 1 = 10, perché in base due il 2 si scrive appunto 10.
Mettiamo i numeri in colonna e cominciamo ad addizionare a partire dalle unità: 1 + 1 = 0, scrivo 0 e riporto 1. Nella colonna di ordine superiore troviamo (1 + 1) + 1 = 10 + 1 = 11, scrivo 1 e riporto 1. Nella colonna di ordine superiore troviamo 1 + 0 + 0 = 1, scrivo 1 senza riportare alcunché. Continuo in questo modo fino ad esaurire tutte le cifre da addizionare. Facciamo la verifica nel sistema decimale:
* In base 2: 101011$_2$ + 10011$_2$ = 111110$_2$.
* In base 10: 43 + 19 = 62.
ESEMPIO 8. Eseguire la somma in base 5 tra 34231$_5$ e 4341$_5$. Costruiamo la tavola di addizione in base cinque: ricordiamo che 4 + 1 = 10, 4 + 2 = 11, 4 + 3 = 12 ecc. Mettiamo i numeri in colonna e cominciamo ad addizionare a partire dalle unità: 1+1 = 2, scrivo 2 senza riporto. Nella colonna di ordine superiore troviamo 3 + 4 = 12. Scrivo 2 e riporto 1. Nella colonna di ordine superiore troviamo (1 + 2) + 3 = 3 + 3 = 11 scrivo 1 e riporto 1. Procedendo verso sinistra ora troviamo (1+4)+4 = 10+4 = 14 scrivo 4 e riporto 1. Infine 1 + 3 = 4. L'addizione è terminata.
Verifica nel sistema decimale:
* In base 5: 34231$_5$ + 4341$_5$ = 44122$_5$.
* In base 10: 2441 + 596 = 3037.

### Sottrazione

Per la sottrazione ci possiamo servire delle stesse tabelle dell'addizione.
ESEMPIO 9. 101011$_2$ - 11111$_2$.
Mettiamo i numeri in colonna e cominciamo a sottrarre partendo dalle unità: 1 - 1 = 0 scrivo 0. Nella colonna di ordine superiore troviamo di nuovo 1 - 1 = 0 scrivo 0. Procedendo verso sinistra troviamo 0 - 1 devo quindi prendere in prestito un'unità di ordine superiore che messa davanti a 0 diviene 10 - 1 = 1. Scrivo 1 e riporto -1. Mi sposto ancora a sinistra e
trovo (-1 + 1) - 1 = 0 - 1. Occorre prendere in prestito un'unità di ordine superiore 10 - 1 = 1. Scrivo 1 e riporto -1. Nella colonna a sinistra ho 0 del minuendo, -1 del riporto e -1 del sottraendo. Occorre prendere a prestito un'unità di ordine superiore quindi 10 - 1 = 1 a cui devo togliere 1 del sottraendo: 1 - 1 = 0. Infine nella unità di ordine superiore devo addizionare il riporto -1 a 1 e scrivo ancora 0. Il risultato della sottrazione è: 11002 Verifica nel sistema decimale:
* In base 2: 101011$_2$ - 11111$_2$ = 1100$_2$.
* In base 10: 43 - 31 = 12.
ESEMPIO 10. 342315 - 43415. Ci serviamo della tavola di addizione in base cinque.
Verifica nel sistema decimale:
* In base 5: 34231$_5$ - 4341$_5$ = 24340$_5$.
* In base 10: 2441 + 596 = 1845.

### Moltiplicazione

Adoperiamo lo stesso algoritmo usato per moltiplicare due numeri decimali utilizzando la tabella della moltiplicazione.
ESEMPIO 11. 101011$_2$ * 101$_2$. Dobbiamo tradurre in base due quello che facciamo in base dieci. Abbiamo perciò bisogno di costruire la tavola della moltiplicazione in base due.
Verifica nel sistema decimale:
* In base 2: 101011$_2$ * 101$_2$ = 11010111$_2$.
* In base 10: 43 * 5 = 215.
ESEMPIO 12. 231$_5$ X 24$_5$. In questo caso abbiamo bisogno di costruire la tavola della moltiplicazione in base cinque.
Verifica nel sistema decimale:
* In base 5: 231$_5$ * 24$_5$ = 12144$_5$.
* In base 10: 66 * 14 = 924.

### Divisione

Anche per la divisione il procedimento è del tutto analogo a quello usato nel sistema decimale, la tavola da utilizzare è quella della moltiplicazione.
ESEMPIO 13. 11101$_2$ : 101$_2$. Dobbiamo tradurre in base due quello che facciamo in base dieci.
La cifra di ordine più alto si ottiene dalla divisione di 111 con 101. Il quoziente è 1, il resto si ottiene dalla differenza tra il dividendo e il prodotto del quoziente per il divisore. In questo caso il resto è 10. Si abbassa lo 0 e otteniamo 100. Si ha 100 : 101 = 0. La seconda cifra del divisore è 0. La moltiplicazione di 0 per il divisore dà 0. Il nuovo resto è 100. Si abbassa l'1 e otteniamo 1001 che viene diviso per 101. Il quoziente è 1 ed il resto è uguale a 100. Dai calcoli risulta quindi: 11101$_2$ : 101$_2$ = (101)$_2$ con resto (100)$_2$. Verifica nel sistema decimale:
* In base 2: 11101$_2$ : 101$_2$ = 101$_2$ con Resto = 100$_2$.
* In base 10: 29 : 5 = 5 con Resto = 4.
Eseguiamo la riprova della divisione in base 2:
dividendo = quoziente * divisore + resto.
Il quoziente 101$_2$ moltiplicato per il divisore 101$_2$ è uguale a 11001$_2$. Se a questo risultato aggiungiamo il resto 100$_2$ otteniamo il dividendo 11101$_2$. Quindi i calcoli effettuati sono corretti.
ESEMPIO 14. 3402$_5$ : 42$_5$.
Dobbiamo tradurre in base cinque quello che facciamo in base dieci. Il 42$_5$ nel 34$_5$ non ci sta. Prendiamo allora tre cifre 340$_5$. Il 4$_5$ nel 34$_5$ ci sta 4$_5$ volte, quindi 4$_5$ è la cifra di ordine più alto del quoziente. Dobbiamo trovare il resto. Il resto si ottiene sottraendo il risultato della moltiplicazione tra 4$_5$ e 42$_5$ che è 323$_5$. Il resto è uguale 12$_5$. Si abbassa il 2$_5$ e otteniamo 122$_5$. Il 4$_5$ nel 12$_5$ ci sta una sola volta, infatti 4$_5$ * 2$_5$ = 13$_5$. La seconda cifra del divisore è 1$_5$. La moltiplicazione di 1$_5$ per il divisore dà 42$_5$. Sottraendo 42$_5$ da 122$_5$ si ottiene 30$_5$. Dato che 30$_5$ è minore di 42$_5$ la divisione intera è terminata. Dunque 3402$_5$ : 42$_5$ = 41$_5$ con resto 30$_5$. Verifica nel sistema decimale:
* In base 5: 3402$_5$ : 42$_5$ = 41$_5$ con Resto = 30$_5$.
* In base 10: 477 : 22 = 21 con Resto = 15.