Convertire i Numeri Decimali in Binario

Capire come convertire i numeri decimali (quelli che utilizziamo ogni giorno) in numeri binari (utilizzati dai computer) è una competenza fondamentale in informatica. Nel sistema binario, la posizione di ogni cifra rappresenta una potenza specifica di due. Possiamo pensare a un numero binario come a un modo per indicare quali potenze di due sono necessarie affinché la loro somma corrisponda al numero dato.
Numero in base-10
128
64
32
16
8
4
2
1
Somma
114
0
1
1
1
0
0
1
0
114 = 64 + 32 + 16 + 2
12
0
0
0
0
1
1
0
0
12 = 8 + 4
13
0
0
0
0
1
1
0
1
13 = 8 + 4 + 1
Ogni 1 nella rappresentazione binaria indica che la corrispondente potenza di due fa parte della somma, mentre ogni 0 indica il contrario. Il bello del sistema binario sta nella sua semplicità e unicità.
💡
Ogni numero ha una e una sola rappresentazione binaria, composta da una somma di potenze di due distinte.

Trovare il bit più a destra

Per cominciare, consideriamo come trovare il bit più a destra nella rappresentazione binaria di un numero. Nel sistema decimale, per ottenere l’ultima cifra di un numero basta calcolare il resto della divisione per 10, spesso indicato come % 10 nei linguaggi di programmazione. Allo stesso modo, in binario, il bit più a destra si trova calcolando il resto della divisione del numero per 2, o % 2. Questo significa anche che il bit più a destra è sempre 1 per i numeri dispari e 0 per i numeri pari.
Ad esempio:
  • Per 114 il bit più a destra è 0, poiché 114 % 2 = 0.
  • Per 13 il bit più a destra è 1, poiché 13 % 2 = 1.

Spostare un numero binario

Dopo aver trovato il bit più a destra, il passo successivo è spostare l’intero numero binario di una posizione a destra. Questa operazione equivale alla divisione intera del numero per 2 (in molti linguaggi indicata come / 2 o // 2 in Python). In questo modo si rimuove il bit più a destra, e il successivo diventa il nuovo bit più a destra.
  • Spostare 114 ( in binario) a destra produce , che in base-10 è 114 / 2 = 57.
  • Spostare 13 ( in binario) a destra produce , che in base-10 è 13 / 2 = 6.

L’algoritmo di conversione

Avendo a disposizione queste due operazioni (trovare il bit più a destra e spostare il numero), possiamo definire un semplice algoritmo per convertire un numero decimale in binario:
  1. Inizializzare una stringa vuota per memorizzare la rappresentazione binaria.
  1. Finché il numero è maggiore di 0:
      • Trovare il bit più a destra calcolando il resto della divisione per 2.
      • Aggiungere questo bit a sinistra della stringa binaria.
      • Dividere il numero per 2 (divisione intera) per spostarlo a destra.
  1. Restituire la stringa binaria se non è vuota, altrimenti 0.
Utilizzando questo algoritmo, è possibile convertire qualsiasi numero in base-10 nella sua unica rappresentazione binaria.

Implementazione minimale

b, d = '101001101', 0   # numeri binari e decimali
power = 1               # Potenza corrente di 2 (1, 2, 4, 8, 16, ...)

for bi in b[::-1]:      # Si itera dal bit meno significativo a quello più significativo
    d += int(bi) * power
    power *= 2

print(d)
binary → decimal conversion
b, d = '', 5234         # numeri binari e decimali

while d > 0:            # Finché ci sono bit da elaborare
    b = str(d % 2) + b  # Inserisce il bit a sinistra della stringa
    d //= 2             # Sposta il numero a destra

print(b if b != '' else 0)
decimal → binary conversion
 
To check your solution you need to sign in
Sign in to continue