I sistemi di numerazione

Un numero è un'entità astratta che esprime una quantità;
i simboli usati per rappresentarlo si dicono cifre.

Nel corso della sua storia, l'uomo ha usato diversi metodi per rappresentare una quantità, questi vengono detti sistemi di numerazione.

Ne esistono di due tipi:

curiosità

Il sistema posizionale più efficiente per il calcolo non sarebbe né la base 10, né la base 2, bensì la base 3.

Nel 1959 in Unione Sovietica fu realizzato il Setun, l'unico (con i suoi successori) computer ternario della storia che usava una variante del sistema ternario puro [0 1 2], cioè il sistema ternario bilanciato [−1 0 1].

Il Setun sfidò la logica binaria proponendo un'architettura che rendeva i calcoli intrinsecamente più semplici rispetto alla base 2: i numeri negativi non richiedevano codici speciali e le operazioni di arrotondamento coincidevano perfettamente con il semplice troncamento delle cifre.

Una soluzione elegante che dimostrò come la simmetria del sistema ternario bilanciato potesse ridurre la complessità logica dell'hardware.

Sistemi non posizionali

Nei sistemi non posizionali, non c'è corrispondenza tra la quantità rappresentata dal simbolo e la posizione che esso occupa nel numero.

Ad esempio, nel numero romano III (1+1+1=3), tutti e tre i simboli valgono 1, quando invece nel nostro 111 il primo 1 (a sinistra) rappresenta la quantità 100, il successivo 10 e l'ultimo 1.

Sistemi posizionali

Con questo termine intendiamo un modo di rappresentare i numeri che attribuisce un diverso significato al simbolo usato, a seconda della posizione che occupa nel numero.

L'utilizzo di un sistema posizionale offre i vantaggi di poter:

  • rappresentare grandi numeri utilizzando pochi simboli
  • effettuare operazioni

Si capisce bene che non offra questi vantaggi un sistema di numerazione non posizionale come quello romano (sistema additivo e sottrattivo), dove per rappresentare il numero 1989 bisogna scrivere MCMLXXXIX e non è possibile svolgere una semplice operazione come:

Decimale Romano
14 + XIV +
7 = VII =
21 ?

appunto perché non c'è corrispondenza tra le posizioni delle cifre e la quantità che esse rappresentano.

Ogni sistema posizionale è caratterizzato dai simboli che utilizza:

Sistema Numero di simboli Simboli
Binario (base 2) 2 0 1
Ternario (base 3) 3 0 1 2
Ottale (base 8) 8 0 1 2 3 4 5 6 7
Decimale (base 10) 10 0 1 2 3 4 5 6 7 8 9
Esadecimale (base 16) 16 0 1 2 3 4 5 6 7 8 9 A B C D E F

In ogni sistema la base coincide con il numero di simboli.

La massima quantità rappresentabile con una sola cifra è l'ultimo simbolo (cioè base − 1).

Nel sistema esadecimale, i simboli successivi al 9 corrispondono a:

Base 16 Base 10
A10
B11
C12
D13
E14
F15

Conversione di sistema (dal/al sistema decimale)

Notazione posizionale

La notazione posizionale, detta anche notazione polinomica, consiste nell'esprimere un numero come somma dei prodotti di ciascuna cifra per la potenza della base corrispondente a quella posizione.

Esempio in base 10, partendo da 2548,73:

\[ \begin{aligned} 2548{,}73_{(10)} &= 2\cdot 10^3 + 5\cdot 10^2 + 4\cdot 10^1 + 8\cdot 10^0 + 7\cdot 10^{-1} + 3\cdot 10^{-2} =\\ &= 2\cdot 1000 + 5\cdot 100 + 4\cdot 10 + 8\cdot 1 + 7\cdot\frac{1}{10} + 3\cdot\frac{1}{100} =\\ &= 2000 + 500 + 40 + 8 + 0{,}7 + 0{,}03 =\\ &= 2548{,}73_{(10)} \end{aligned} \]

In altre parole, 2548,73 significa sommare 2 migliaia, 5 centinaia, 4 decine, 8 unità, 7 decimi e 3 centesimi.

Esprimere con la notazione posizionale un numero in base 10 ha meri fini esplicativi: siamo infatti partiti da \(2548{,}73_{(10)}\) per arrivare a dire che è uguale a sé stesso. In generale, però:

la notazione posizionale converte un numero da qualunque base alla base 10.

Seguono esempi per ogni sistema:

Sistema binario

Utilizzando il sistema binario, ci si avvale di potenze con base 2:

\[ \begin{aligned} 10011_{(2)} &= 1\cdot 2^4 + 0\cdot 2^3 + 0\cdot 2^2 + 1\cdot 2^1 + 1\cdot 2^0 =\\ &= 1\cdot 16 + 0\cdot 8 + 0\cdot 4 + 1\cdot 2 + 1\cdot 1 =\\ &= 16 + 0 + 0 + 2 + 1 =\\ &= 19_{(10)} \end{aligned} \]

Sistema ternario

Utilizzando il sistema ternario, ci si avvale di potenze con base 3:

\[ \begin{aligned} 10122_{(3)} &= 1\cdot 3^4 + 0\cdot 3^3 + 1\cdot 3^2 + 2\cdot 3^1 + 2\cdot 3^0 =\\ &= 1\cdot 81 + 0\cdot 27 + 1\cdot 9 + 2\cdot 3 + 2\cdot 1 =\\ &= 81 + 0 + 9 + 6 + 2 =\\ &= 98_{(10)} \end{aligned} \]

Sistema ottale

Utilizzando il sistema ottale, ci si avvale di potenze con base 8:

\[ \begin{aligned} 1357_{(8)} &= 1\cdot 8^3 + 3\cdot 8^2 + 5\cdot 8^1 + 7\cdot 8^0 =\\ &= 1\cdot 512 + 3\cdot 64 + 5\cdot 8 + 7\cdot 1 =\\ &= 512 + 192 + 40 + 7 =\\ &= 751_{(10)} \end{aligned} \]

Sistema esadecimale

Utilizzando il sistema esadecimale, ci si avvale di potenze con base 16:

\[ \begin{aligned} 2\mathrm{AF}_{(16)} &= 2\cdot 16^2 + 10\cdot 16^1 + 15\cdot 16^0 =\\ &= 2\cdot 256 + 10\cdot 16 + 15\cdot 1 =\\ &= 512 + 160 + 15 =\\ &= 687_{(10)} \end{aligned} \]

Metodo delle divisioni successive

Grazie al metodo delle divisioni successive si ottiene il risultato inverso rispetto alla notazione posizionale, ovvero si converte un numero espresso nel sistema decimale nell'equivalente espresso in un altro sistema.

Questo metodo consiste nel dividere il numero decimale per la base di destinazione, appuntare quoziente e resto, quindi continuare a dividere il quoziente finché questo non raggiunga lo zero. Leggendo in ordine inverso i resti ottenuti si ottiene il numero espresso nel sistema desiderato.

Seguono esempi per ogni sistema:

Sistema binario

Per convertire in binario il numero decimale 22 si eseguono divisioni successive per 2:

  • 22 : 2 = 11, resto 0
  • 11 : 2 = 5, resto 1
  • 5 : 2 = 2, resto 1
  • 2 : 2 = 1, resto 0
  • 1 : 2 = 0, resto 1
quoziente resto
220
111
5 1
2 0
1 1
0

Leggendo i resti dal basso verso l'alto si ottiene il numero in base 2:

\[ 22_{(10)} = 10110_{(2)} \]

Sistema ternario

Per convertire il numero decimale 46 in ternario si eseguono divisioni successive per 3:

  • 46 : 3 = 15, resto 1
  • 15 : 3 = 5, resto 0
  • 5 : 3 = 1, resto 2
  • 1 : 3 = 0, resto 1
quoziente resto
461
150
5 2
1 1
0

Leggendo i resti dal basso verso l'alto si ottiene il numero in base 3:

\[ 46_{(10)} = 1201_{(3)} \]

Sistema ottale

Per convertire il numero decimale 87 in ottale si eseguono divisioni successive per 8:

  • 87 : 8 = 10, resto 7
  • 10 : 8 = 1, resto 2
  • 1 : 8 = 0, resto 1
quoziente resto
877
102
1 1
0

Leggendo i resti dal basso verso l'alto si ottiene il numero in base 8:

\[ 87_{(10)} = 127_{(8)} \]

Sistema esadecimale

Per convertire il numero decimale 303 in esadecimale si eseguono divisioni successive per 16:

  • 303 : 16 = 18, resto 15 (F)
  • 18 : 16 = 1, resto 2
  • 1 : 16 = 0, resto 1
quoziente resto
30315 (F)
18 2
1 1
0

Leggendo i resti dal basso verso l'alto si ottiene il numero in base 16:

\[ 303_{(10)} = 12\mathrm{F}_{(16)} \]