© 2014-2025 Roberto Foschini All rights reserved

Sistema binario

Tra tutti i sistemi di numerazione, il sistema binario è il più importante e quello che incontrerete più spesso in quanto è alla base dell'informatica. In questa lezione vedremo com'è definito, le sue caratteristiche, come si passa dal sistema binario al sistema decimale e dal sistema decimale a quello binario.😉

Cos'è il sistema binario

Il sistema di numerazione binario, o sistema in base due, deve il suo nome al fatto che vengono utilizzate solo e soltanto due cifre: 0 e 1. Proprio come nel caso di quello che usiamo tutti i giorni, il sistema di numerazione binario è posizionale, cioè ha importanza la posizione assunta da ogni singola cifra all'interno di un numero.

Per indicare che un numero è scritto utilizzando il codice binario si racchiude tra parentesi tonde mettendo poi un 2 come pedice.

Ad esempio 1011 scritto in questo modo indica il numero milleundici nel sistema di numerazione decimale, invece scrivendo:

(1011)2

stiamo ad indicare il numero nella base due ed in questo caso si leggerà: "uno zero uno uno in base due", cioè si leggono le cifre che lo compongono una alla volta.

Dopo aver fatto queste semplici ma indispensabili premesse vediamo come convertire un numero dalla base 2 alla base 10 e, viceversa, come passare dalla base 10 alla base 2.

Come passare dal sistema binario al sistema decimale

Dato un numero binario per vedere a quale numero corrisponde nel sistema di numerazione decimale basta ricorrere alla forma polinomiale. Come? Vediamolo con un esempio. Proponiamoci di convertire in base 10 il numero (1101)2.

1) partendo dalla prima cifra a destra assegnamo la posizione alle cifre del nostro numero:

\( \underbrace{1}_{4^{a}} \underbrace{1}_{3^a} \underbrace{0}_{2^a} \underbrace{1}_{1^a} \)

2) moltiplichiamo la 1a per 20, la 2a per 21, la 3a per 22, la 4a per 23.. e così via se il numero dovesse avere più di 4 cifre;

3) sommando i valori trovati al punto 2) avremo il numero in base 10.

Volendo fare il tutto in un solo colpo:

\( (1101)_2=1 \times \underbrace{2^0}_{=1} + 0 \times \underbrace{2^1}_{=2} + 1 \times \underbrace{2^2}_{=4} + 1 \times \underbrace{2^3}_{=8} = \)

ricordando l'ordine con cui vanno eseguite le operazioni

\( =1 \times 1 + 0 \times 2 + 1 \times 4 + 1 \times 8= 1+0+4+8=13 \)

Altri esempi di passaggio dalla base 2 alla base 10

Seguiamo il procedimento appena visto e convertiamo i seguenti numeri dal sistema binario (base 2) al sistema decimale (base 10)

\( (10100)_2=0 \times 2^0 \ + \ 0 \times 2^1 \ + \ 1 \times 2^2 \ + \ 0 \times 2^3 \ + \ 1 \times 2^4 = 0 + 0 + 4 + 0 + 16 = {\color{red}20} \)

Prendiamo un numero binario un po' più lungo...

\( (110101)_2=1 \times 2^0 \ + \ 0 \times 2^1 \ + \ 1 \times 2^2 \ + \ 0 \times 2^3 \ + \ 1 \times 2^4 + 1 \times 2^5= 1 + 0 + 4 + 0 + 16 + 32= {\color{red}53} \)

...e ancora, vediamo un terzo esempio

\( (11001001)_2=1 \times 2^0 \ + \ 0 \times 2^1 \ + \ 0 \times 2^2 \ + \ 1 \times 2^3 \ + \ 0 \times 2^4 + 0 \times 2^5 + 1 \times 2^6 + 1 \times 2^7= 1 + 0 + 0 + 8 + 0 + 0 + 64 + 128= {\color{red}201} \)

Dal sistema decimale al sistema binario

Per passare dalla base dieci alla base due bisogna dividere il numero per 2 e successivamente continuare a dividere i quozienti ottenuti per 2 fino ad ottenere, come quoziente, uno zero. I resti delle divisioni, scritti in ordine inverso, ci daranno il numero scritto in base due.

Supponiamo, ad esempio, di voler scrivere il numero 136 in base due. Partiamo dal dividere 136 ed i quozienti che man mano verranno fuori per 2 appuntandoci a lato i resti:

\( \begin{array}{rcrclcll}136 & : & 2 & = & 68 & \ & \mbox{resto} & 0 \\ 68 & : & 2 & = & 34 & \ & \mbox{resto} & 0 \\ 34 & : & 2 & = & 17 & \ & \mbox{resto} & 0 \\ 17 & : & 2 & = & 8 & \ & \mbox{resto} & 1 \\ 8 & : & 2 & = & 4 & \ & \mbox{resto} & 0 \\ 4 & : & 2 & = & 2 & \ & \mbox{resto} & 0 \\ 2 & : & 2 & = & 1 & \ & \mbox{resto} & 0 \\ 1 & : & 2 & = & {\color{red}0} & \ & \mbox{resto} & 1\end{array} \)

Scrivendo i resti all'inverso rispetto all'ordine con cui li abbiamo ottenuti avremo il valore di 136 nel sistema binario, ovvero:

\( 136 = {\color{red}(10001000)_2} \)

Altri esempi di conversione dalla base 10 alla base 2

Vogliamo scrivere 29 in base 2. Pronti con le divisioni?

\( \bullet \ 29=\overbrace{(....)_2}^{\mbox{?}} \)

\( \begin{array}{rcrclcll}29 & : & 2 & = & 14 & \ & \mbox{resto} & 1 \\ 14 & : & 2 & = & 7 & \ & \mbox{resto} & 0 \\ 7 & : & 2 & = & 3 & \ & \mbox{resto} & 1 \\ 3 & : & 2 & = & 1 & \ & \mbox{resto} & 1 \\ 1 & : & 2 & = & {\color{red}0} & \ & \mbox{resto} & 1\end{array} \)

Allora leggendo i resti al contrario otterremo la rappresentazione binaria cercata: \( 29=(11101)_2 \). Vediamo un altro esempio

\( \bullet \ 287=\overbrace{(....)_2}^{\mbox{?}} \)

\( \begin{array}{rcrclcll}287 & : & 2 & = & 143 & \ & \mbox{resto} & 1 \\ 143 & : & 2 & = & 71 & \ & \mbox{resto} & 1 \\ 71 & : & 2 & = & 35 & \ & \mbox{resto} & 1 \\ 35 & : & 2 & = & 17 & \ & \mbox{resto} & 1 \\ 17 & : & 2 & = & 8 & \ & \mbox{resto} & 1 \\ 8 & : & 2 & = & 4 & \ & \mbox{resto} & 0 \\ 4 & : & 2 & = & 2 & \ & \mbox{resto} & 0 \\ 2 & : & 2 & = & 1 & \ & \mbox{resto} & 0 \\ 1 & : & 2 & = & {\color{red}0} & \ & \mbox{resto} & 1\end{array} \)

Riportando i resti al contrario avremo che

Allora \( 287=(100011111)_2 \)


Sistema esadecimale

Il sistema numerico esadecimale (spesso abbreviato come esa o hex) è un sistema numerico posizionale in base 16, cioè che utilizza 16 simboli invece dei 10 del sistema numerico decimale tradizionale. Per l'esadecimale si usano in genere simboli da 0 a 9 per le prime dieci cifre, e poi le lettere da A a F per le successive sei cifre, per un totale di 16 simboli.

Ecco una tabella che confronta le rappresentazioni esadecimali, decimali, ottali e binarie dei numeri fino a 15:

0hex = 0dec = 0oct 0 0 0 0
1hex = 1dec = 1oct 0 0 0 1
2hex = 2dec = 2oct 0 0 1 0
3hex = 3dec = 3oct 0 0 1 1
4hex = 4dec = 4oct 0 1 0 0
5hex = 5dec = 5oct 0 1 0 1
6hex = 6dec = 6oct 0 1 1 0
7hex = 7dec = 7oct 0 1 1 1
8hex = 8dec = 10oct 1 0 0 0
9hex = 9dec = 11oct 1 0 0 1
Ahex = 10dec = 12oct 1 0 1 0
Bhex = 11dec = 13oct 1 0 1 1
Chex = 12dec = 14oct 1 1 0 0
Dhex = 13dec = 15oct 1 1 0 1
Ehex = 14dec = 16oct 1 1 1 0
Fhex = 15dec = 17oct 1 1 1 1

Perciò il numero decimale 143, la cui rappresentazione binaria è 1000 1111, può essere scritto come 8F in esadecimale.

Il sistema esadecimale è molto usato in informatica, per la sua relazione diretta tra una cifra esadecimale e quattro cifre binarie. È spesso usato come intermediario, oppure come sistema numerico a sé stante. Per esempio, è possibile esprimere un byte con esattamente due cifre esadecimali (invece che con 3 decimali, e lasciando gran parte dell'intervallo non utilizzato). È interessante, infatti, notare come ogni cifra esadecimale corrisponda a un nibble, cioè a un numero binario di quattro cifre.

Ci sono numerosi modi per denotare un numero come esadecimale, usati in differenti linguaggi di programmazione:

Non esiste un simbolo standard, perciò tutte le convenzioni elencate sopra vengono utilizzate, e a volte lo stesso articolo può contenere due convenzioni diverse. Ciononostante, non si crea molta confusione perché tutte sono non ambigue.

La parola "esadecimale" è peculiare, perché il prefisso esa è derivato dal greco έξι (exi) (che significa sei), e decimale deriva dalla parola latina per dieci.

Conversione dal sistema esadecimale al sistema decimale e viceversa

Un metodo per convertire un numero esadecimale in decimale è quello di moltiplicare le sue cifre per le potenze della base 16. Ad esempio 4F \( = 4 \times 16^1 + {\rm F}\times 16^0 \) dove F vale 15 (vedi tabella sopra):

quindi \( (4\rm{F})_{16} = 4\times 16^1 + 15\times 16^0 \). (Si ricorda che 160 = 1).

Allora \( (4\rm{F})_{16} = 4\times 16^1 + 15\times 1= 4\times 16 + 15 \times 1 = 64+15 = 79 \).

L'operazione inversa - da decimale ad esadecimale - si realizza con una serie di divisioni successive. Si utilizza la divisione con resto. Vediamo un esempio:

\( \frac{79}{16}=4,9375 \) quindi si arrotonda il risultato per difetto. Occorre ora trovare il resto, il modo più semplice è moltiplicare la parte decimale per il divisore della precedente operazione: \( 0,9375\times16=15 \). Infine si deve comporre il numero in sistema esadecimale: il 4 è indicato dal simbolo 4, il 15 dal simbolo F: 4F.

Un altro esempio:

FB3 in esadecimale corrisponde al numero 4019 in base decimale. Si ha

\( ({\rm FB}3)_{16} = F\times 16^2 + B\times 16^1 + 3\times 16^0 = 15\times 16^2 + 11\times 16^1 + 3\times 16^0= \) \( = 15\times 256 + 11\times 16 + 3\times 1= 3840+176+3= 4019. \)

Viceversa, convertiamo 4019 in esadecimale:

4019:16 = 251 con resto 3.

Il quoziente 251 va di nuovo diviso per 16,

251:16 = 15 con resto 11,

Il quoziente 15 è minore della base 16 e il procedimento di divisione si arresta.

Si scrive il numero partendo dall'ultimo risultato ottenuto e si risale la successione dei resti. Il numero esadecimale è 15-11-3

cioè F-B-3

che si scrive FB3.

Conversione dal sistema esadecimale al sistema binario e viceversa

Come riportato nell'introduzione, la ragione per cui si adopera in informatica il sistema esadecimale è che può essere considerato come una scrittura più compatta del sistema binario. La conversione dalla base 16 alla base 2 e viceversa può essere svolta per sostituzione di gruppi di cifre invece che con algoritmi di divisione.

Ad esempio, si consideri il seguente numero in base 16: A16BC916. Per convertilo in base 2, è sufficiente prelevare ciascuna cifra esadecimale e sostituirla con il suo equivalente nel sistema binario, come riportato nella colonna a destra della tabella iniziale. Seguendo questa procedura, si perviene al seguente risultato:

A16BC916 = A 1 6 B C 916
= 1010  0001  0110  1011  1100  10012
= 1010000101101011110010012

Per ottenere la conversione opposta, invece, bisogna procedere nella maniera inversa: si suddivide il numero binario in gruppi di 4 cifre a partire da destra (se l'ultimo gruppo contiene meno di 4 cifre, vanno anteposti tanti zeri quanti servono per completarlo) e si sostituisce ogni gruppo con il suo equivalente esadecimale. Supponiamo ad esempio di convertire in base 16 il numero in base 2: 1001011111110010112. Effettuando le operazioni descritte in precedenza si ha:

1001011111110010112 = 0010  0101  1111  1100  10112
= 2 5 F C B16
= 25FCB16

Inoltre qui trovi una scheda di esercizi svolti sul sistema binario.

Scheda: conversioni tra le basi binarie