Niente teoria, solo il metodo spiegato velocemente per convertire un numero binario in decimale e un numero decimale in binario. Insomma, appunti condivisi in rete.

Da binario a decimale

Partendo da destra, moltiplichiamo ogni cifra del numero binario per 2 elevato a potenza, il cui esponente è la “posizione” della cifra stessa (iniziando da zero). Esempio se dovessimo convertire il numero

11000101

calcoleremmo

1 * 2^0 = 1
0 * 2^1 = 0
1 * 2^2 = 4
0 * 2^3 = 0
0 * 2^4 = 0
0 * 2^5 = 0
1 * 2^6 = 64
1 * 2^7 = 128

Quindi sommiamo i risultati tra loro

1+4+64+128 = 197

Da decimale a binario

Il procedimento inverso è un po’ più complicato, ma origina dalle medesime premesse teoriche. Dividiamo per 2 il numero decimale: il resto (arrotondato per eccesso a 1) sarà la nostra cifra binaria. Facciamo lo stesso con il risultato dell’operazione e prooseguiamo fino ad arrivare a 0 (escluso).

Dovendo quindi convertire in binario il numero 197 faremmo così:

197 / 2 = 98, con resto 1 (cioè 0,5 arrotondato)
98 / 2 = 49, con resto 0
49 / 2 = 24, con resto 1
24 / 2 = 12, con resto 0
12 / 2 = 6, con resto 0
6 / 2 = 3, con resto 0
3 / 2 = 1, con resto 1
1 / 2 = 0, con resto 1

Quindi prendendoi “resti” in ordine inverso, dall’ultimo al primo otteniamo esattamente

11000101

Al computer!

Scriviamo un paio di funzioni in linguaggio C++ che facciano il lavoro di conversione per noi. Solo per comodità utilizzo le dipendenze <math.h> (per elevare a potenza con la fuzione pow) la funzione e <string.h> (per le stringhe).

# Da binario a decimale
int bin_to_dec(string n_binario) {
    int i;
    int esp = n_binario.size();
    int sum = 0;
    for (i=0;i<n_binario.size();i++) {
        sum += n_binario[i]*pow(2,esp);
        esp--;
    }
    return sum;
}

# Da decimale a binario
string dtob(int n) {
    string result;
    int r = 0;
    if (n == 0) {
        result.append(1,'0');
        return result;
    } else {
        while(n>=1) {
            r = n%2;
            result.append(1, (char)r+48);
            n = (int)n/2;
        }
        # Riscrivo le cifre nell'ordine corretto
        string result2;
        n=0;
        for(r=result.size()-1;r>=0;r--) {
            result2.append(1, result[r]);
        }
        return result2;
    }
}