Convertire da decimale a binario in C++

In questa lezione implementeremo degli algoritmi per convertire da binario a decimale in C++, cioè il viceversa dell’algoritmo proposto nella lezione precedente.

Prima soluzione per convertire da binario a decimale in C++

Quindi utilizziamo innanzitutto un algoritmo che fa uso della funzione pow dell’header cmath, che dunque dobbiamo includere.

Allora per prima cosa prendiamo in input il numero binario da convertire. Dopo finché questo numero è maggiore di zero, eseguiamo delle istruzioni.

Se il resto della divisione di b per 10 è diverso da zero vuol dire che siamo in presenza di un 1. Altrimenti siamo in presenza di uno zero e facciamo sicuramente a meno di moltiplicarlo.

Quindi solo se il resto è 1 eseguiamo l’operazione d=d+pow(2,i), dove i viene inizializzato a zero e incrementato in ogni caso ad ogni iterazione.

Il numero binario ad ogni iterazione viene comunque diviso per 10.

Ecco dunque il codice dell’algoritmo per convertire da binario a decimale in C++:

#include <iostream>
#include <cmath>
using namespace std;

int main() {
    int b, d = 0, i = 0;
    
    cout << "Inserisci il numero binario da convertire: ";
    cin >> b;
    
    while (b > 0) {
        d += (b % 10) * pow(2, i);
        b /= 10;
        i++;
    }
    
    cout << "Il numero in decimale vale: " << d << endl;
    
    return 0;
}

Facciamo adesso un esempio prendendo in input il numero binario 101.

while(b > 0) {   // è vera in quanto 101 è maggiore di 0

      if(b % 10 != 0) {   (101 % 10 != 0) risulta vera quindi eseguiamo l’operazione

    d = d + pow(2,i);  // d = 0 + 2^0 = 1
}
b = b / 10;  // dividiamo b per 10, essendo una divisione tra interi b = 10
i++; //incrementiamo i che diventa 1

 }

Seconda iterazione:

while(b > 0) {   // è vera in quanto 110 è maggiore di 0

   if(b % 10 != 0) {  // (10 % 10 != 0) risulta falsa quindi non eseguiamo l’operazione

        d = d + pow(2,i); 
   }
b = b / 10;  // dividiamo b per 10, essendo una divisione tra interi b = 1
i++; //incrementiamo i che diventa 2

}

Terza iterazione:

while(b > 0) {   //è vera in quanto 1 è maggiore di 0

    if(b % 10 != 0) {   // (110 % 10 != 0) risulta falsa quindi non eseguiamo l’operazione

        d = d + pow(2,i);  // d = 1 + 2^2 = 5
    }
b = b / 10;  // dividiamo b per 10, essendo una divisione tra interi b = 0
i++; //incrementiamo i che diventa 3

}

Non viene fatta nessun’altra iterazione in quanto b > 0 diventa falsa.

Quindi stampiamo il numero decimale così ottenuto.

 


Seconda soluzione

La seconda soluzione, all’algoritmo per convertire da binario a decimale in C++, prevede invece di prendere in input cifra per cifra e dopo convertirla.

Inizialmente quindi inseriamo la lunghezza del numero binario.

Dopo con un ciclo while che itera finché n è diverso da 0, chiediamo di inserire ciascuna cifra facendo anche un controllo dell’input.

Quindi moltiplichiamo d per 2 e aggiungiamo il valore di b. Di volta in volta aggiorniamo quindi la variabile d.

Ecco dunque l’algoritmo completo:

#include <iostream>
using namespace std;

int main() {
    int d = 0, b, n;
    
    cout << "Inserisci il numero di bit da convertire: ";
    cin >> n;    
    
    while (n != 0) {
        do {
            cout << "Inserisci il bit, solo 0 o 1: ";
            cin >> b;
        } while (b != 0 && b != 1);
        
        d = d * 2 + b;
        n--;        
    }

    cout << "Valore decimale: " << d << endl;
    
    return 0;
}

Terza soluzione

Infine realizziamo una terza soluzione per convertire da binario a decimale in C++.

In questa soluzione utilizzeremo la funzione pow dell’header cmath e la funzione strlen dell’header string per trovare la lunghezza della stringa.

Utilizziamo il tipo di dato char per memorizzare il numero binario.

Inseriamo la sequenza di bit e dopo calcoliamo la lunghezza di b con la funzione strlen.

Infatti la lunghezza mi serve per determinare il numero di iterazioni da effettuare.

All’interno del ciclo while quindi di volta in volta controlliamo il carattere contenuto in b, se è 1 allora possiamo elevare 2 a len-1 (ricordiamo che le potenze partono da 0 fino a len-1) e aggiungerlo al valore precedente di d.

In ogni caso decrementiamo la lunghezza e incrementiamo l’indice i che serve a scorrere il numero binario.

Ecco quindi il codice completo della seconda soluzione per convertire da binario a decimale in C++:

#include <iostream>
#include <cstring>
#include <cmath>

using namespace std;

int main() {
    int d = 0, len;

    char b[10];

    cout << "Inserisci la sequenza di bit: ";
    cin >> b;
    len = strlen(b);

    int i = 0; // Inizializza l'indice i a 0

    while (len != 0) {
        if (b[i] == '1')
            d = d + pow(2, (len - 1));

        len--;
        i++; // Incrementa l'indice i
    }

    // Stampo a video la conversione
    cout << "\nValore decimale: " << d << "\n";

    return 0;
}

Adesso spieghiamo passo passo l’algoritmo:

Inseriamo b = 110

len = strlen(b);  // len = 3

while(len != 0) {  //vera

if (b[i] == ‘1’)  //vera  b[0] = 1 partendo da destra

d = d + pow(2,(len – 1));  //d = 0 + 2^2 = 4

len–; //len = 2

}

while(len != 0) {  //vera

if (b[i] == ‘1’)  //vera  b[1]=1

d = d + pow(2,(len – 1));  //d = 4 + 2^1 = 6

len–; //len = 1

i++; //i = 2

}

while(len != 0) {  //vera

if (b[i] == ‘1’)  //falsa

d = d  +pow(2,(len – 1));

len–; //len = 2

i++; //i = 1

}

Quindi stamperà d = 6.

Abbiamo visto quanti metodi diversi ci possono essere per convertire da binario a decimale in C++.

Alcuni link utili

Indice argomenti linguaggio C++

1- Introduzione al linguaggio C++

2- Variabili in C++

3- Operatori di assegnazione in C++

4- Esempi in C++

5- Casting in C++

Successione di Fibonacci in C++

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *