Sistema di numerazione binario

Così come i numeri decimali sono composti da 10 cifre, da zero a nove, esistono altri sistemi di numerazione che operano con meno o più cifre.

Il sistema binario opera soltanto con le cifre zero e uno.

A cosa serve? Perché?

La rappresentazione binaria è importante in quanto il mondo moderno, di internet, delle telecomunicazioni, dell’informatica è costruito sull’elettronica digitale. L’elettronica digitale processa segnali chiari e nitidi, cioè segnali che possono essere presenti o assenti in un circuito elettronico e non, per esempio, presenti a metà o presenti un po’ o presenti all’84%.

Nell’elettronica digitale tutto è bianco o nero, tutto è acceso o spento, tutto è zero o uno e non 0 virgola 71 oppure 1 virgola 183. È combinando questi zero e uno in vari modi che si rappresenta l’informazione, ad esempio il contenuto di un file di testo, una foto, un vocale su WhatsApp, un video su YouTube, un software stesso.

Poiché memorie, processori, segnali elettrici operano in digitale, zero e uno possono essere memorizzati facilmente su un supporto come un disco, una memoria, oppure trasmessi su internet via cavo o WiFi, cosa che non si può dire altrettanto di 0,71 e 1,183.

È quindi importante sapere come operare con i numeri binari perché questo è alla base del mondo moderno.

  1. Numeri decimali
  2. Da binario a decimale
  3. Da decimale a binario
  4. Somma fra numeri binari
  5. Operazioni AND, OR, NOT bit per bit

Numeri decimali

Per il numero decimale 9468, se contiamo da destra verso sinistra le posizioni delle cifre, partendo da zero, notiamo che:

  • il 9 è in posizione 3
  • il 4 è in posizione 2
  • il 6 è in posizione 1
  • l’8 è in posizione 0

Possiamo scomporre il 9468 in potenze del 10, dove ogni potenza ha come esponente la posizione della cifra che moltiplica:

9468 = 9 * 10^3 + 4 * 10^2 + 6 * 10^1 + 8 * 10^0
3210

Abbiamo indicato sotto ogni cifra la sua posizione, per chiarezza.

Riscriviamo:

9468 = 9 * 1000 + 4 * 100 + 6 * 10 + 8

Se si fa tutto il calcolo, si scopre che il risultato è, come previsto, 9468.

Questa vale per i numeri decimali ma lo stesso procedimento può essere applicato per i numeri binari e esadecimali.

Da binario a decimale

È più facile mostrare come convertire un numero binario in decimale che viceversa, quindi cominciamo da qui.

Ipotizziamo di avere il numero binario 101101. Questo può essere descritto con le potenze del 2 invece che del 10, dove ogni cifra è moltiplicata per 2 elevato alla sua posizione:

0b101101 = 1 * 2^5 + 0 * 2^4 + 1 * 2^3 + 1 * 2^2 + 0 * 2^1 + 1 * 2^0
  543210

Anche in questo caso abbiamo indicato sotto ogni cifra la sua posizione, per chiarezza.

Il prefisso 0b serve per indicare che il numero è binario e non confonderlo con un numero decimale. Per i numeri esadecimali utilizziamo invece il prefisso prefisso 0x. Senza prefisso intendiamo numeri decimali. Il prefisso non ha alcun effetto nei calcoli e va ignorato.

Eliminiamo le moltiplicazioni 1* in quanto superflue e gli addendi che iniziano con 0* in quanto il loro valore è sempre zero:

0b101101 = 2^5 + 2^3 + 2^2 + 2^0
  543210

Rimangono sono le potenze del 2 che corrispondono agli uno. Ogni potenza ha l’esponente che corrisponde alla sua posizione.

Completiamo il calcolo:

0b101101 = 32 + 8 + 4 + 1 = 45

A 101101 in binario corrisponde 45 in decimale.

Altri esempi di conversioni da binario e decimale:

  0b1011 = 2^3 + 2^1 + 2^0 = 8 + 2 + 1 = 11
 0b11001 = 2^4 + 2^3 + 2^0 = 16 + 8 + 1 = 25
0b101110 = 2^5 + 2^3 + 2^2 + 2^1 = 32 + 8 + 4 + 2 = 46

Da decimale a binario

Se la conversione da binario a decimale si effettua moltiplicando le cifre per varie potenze del 2, la conversione opposta da decimale a binario di effettua dividendo il numero da convertire più volte sempre per 2.

I resti delle divisioni letti dal basso verso l’alto compongono il numero binario.

Esempio, convertiamo 25 in binario. Dall’esempio precedente sappiamo che il risultato dovrà essere 11001 ma vediamo come calcolarlo.

25 / 2 = 12 con resto 1
12 / 2 =  6 con resto 0
 6 / 2 =  3 con resto 0
 3 / 2 =  1 con resto 1
 1 / 2 =  0 con resto 1

Ci fermiamo quando otteniamo il quoziente 0, ricordandoci però di considerare il resto di quest’ultima divisione.

Leggendo i resti dal basso verso l’alto otteniamo 11001, che è il numero binario cercato.

Possiamo rappresentare questa catena di divisioni in un modo più agevole, eliminando la dicitura diviso 2 e lasciando solo i resti:

Valore Resto della divisione per 2
25 1
12 0
6 0
3 1
1 1
0  

Il calcolo del resto si può fare a mente: se il valore da dividere è dispari, il resto sarà 1 mentre se il valore da dividere è pari il resto sarà 0. Vedremo che questo semplice trucco non può essere usato per le conversioni in esadecimale.

Facciamo un altro esempio con il numero 1193.

Valore Resto della divisione per 2
1193 1
596 0
298 0
149 1
74 0
37 1
18 0
9 1
4 0
2 0
1 1
0  

Leggendo i resti dal basso verso l’alto otteniamo 10010101001, che è il numero binario cercato.

Somma fra numeri binari

Impariamo a sommare 2 numeri binari e verificare poi, convertendoli in decimale, se il calcolo è stato fatto correttamente.

La somma si fa in colonna come nel caso decimale, ricordiamoci però che si opera in base 2 quindi con le regole che seguono:

    0 + 0 = 0
    0 + 1 = 1
    1 + 0 = 1
    1 + 1 = 0 con riporto di 1
1 + 1 + 1 = 1 con riporto di 1

Vediamo quindi come sommare 2 numeri: X e Y. Li scriviamo in colonna, li allineiamo a destra, e aggiungimo in alto una riga con il riporto.

Scegliamo ad esempio i numeri binari:

  • X = 1011101
  • Y = 111001

Incolonniamo (e diamo un nome per chiarezza a ogni colonna) e calcoliamo:

colonna   h g f e d c b a
riporto   1 1 1 1     1
      
      X     1 0 1 1 1 0 1
      Y       1 1 1 0 0 1
      -------------------
  X + Y   1 0 0 1 0 1 1 0

Sommiamo da destra verso sinistra:

colonna a:  1 + 1                      = 0 con riporto di 1
colonna b:  0 + 0 + 1 che ne riportavo = 1
colonna c:  1 + 0                      = 1
colonna d:  1 + 1                      = 0 con riporto di 1
colonna e:  1 + 1 + 1 che ne riportavo = 1 con riporto di 1
colonna f:  0 + 1 + 1 che ne riportavo = 0 con riporto di 1
colonna g:  1     + 1 che ne riportavo = 0 con riporto di 1
colonna h:          1 che ne riportavo = 1

Verifichiamo convertendo i numeri binari X, Y e X+Y nel sistema decimale:

 0b1011101 =       64      + 16 + 8 + 4     + 1 = 93
  0b111001 =            32 + 16 + 8         + 1 = 57
0b10010110 = 128           + 16     + 4 + 2     = 150

Effettivamente, 93 + 57 = 150. Il conto torna.

Operazioni AND, OR, NOT bit per bit

(in via di pubblicazione)