Transformarea unui număr din baza 2 în baza 10 în C++

Dându-se un număr natural n în baza 2, vrem să transformăm numărul dat în baza 10.

Exemplu: Pentru n = 1110, numărul în baza 10 este 14.

Ce este o bază de numerație?

Pentru a înțelege cum se convertește un număr din baza 2 în baza 10, trebuie să înțelegem ce este o bază.

O bază de numerație reprezintă numărul de semne distincte necesare scrierii unui număr.

Mai exact, pentru a scrie un număr într-o bază b, ne vom folosi de b simboluri. Pentru baza pe care o folosim noi zilnic, baza 10, avem cele 10 cifre: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.

Pentru a număra într-o bază de numerație, luăm cifrele pe rând, iar când ajungem la final, adunăm 1 la următoarea cifră. Pentru baza 10, avem primele 10 numere 0, 1, 2, …, 8, 9, după care cifra revine la 0 și adunăm 1 la următoarea cifră: 10. Procesul acesta continuă la infinit.

Despre baza 2

Când numărăm în baza 2, având doar cifrele 0 și 1, vom începe cu acestea, după care continuăm să numărăm astfel: 0, 1, 10, 11, 100, 101, 110, 111, ….

Cum transformăm un număr din baza 2 în baza 10?

Având numărul nostru n în baza 2, pentru a-l transforma în baza 2, vom proceda astfel:

  1. Numerotăm cifrele, de la dreapta la stânga, începând cu 0;
  2. Calculăm, pentru fiecare cifră în parte, valoarea cif * 2^i, unde cif este cifra curentă, iar i reprezintă indicele de la numerotarea din pasul 1;
  3. Adunăm valorile create anterior.

Iată un exemplu, pentru n = 10101110:

https://i.ibb.co/wWdgvfb/image.png

Implementare C++

Cunoscând regulile menționate mai devreme, implementarea în C++ este mai jos. Deoarece parcurgem cifrele de la dreapta la stânga, este foarte ușor să calculăm 2^i pentru fiecare număr în parte.

#include <iostream>

using namespace std;

int main()
{
    //Declarăm și citim numărul în baza 2
    int n;
    cin >> n;

    //Calculăm și afișăm numărul în baza 10
    int raspuns = 0, doiLai = 1;
    while(n > 0) {
        int cifraCurenta = n % 10; //Cifra curentă, de 0 sau de 1
        raspuns += cifraCurenta * doiLai; //Adunăm la răspuns cif * 2^i, cum am menționat mai devreme
        doiLai *= 2; //Cum i crește, 2^i se va înmulți cu 2.
        n /= 10;
    }
    cout << raspuns;
    return 0;
}

Bibliografie și alte resurse

DS

Autorul acestei lecții

Dominic Satnoianu

Această lecție a fost redactată de către Dominic Satnoianu.

© 2021 – 2025 Aspire Education Labs SRL. Toate drepturile rezervate.

Așa cum este specificat și în termeni și condiții, conținutul acestei pagini este protejat de legea drepturilor de autor și este interzisă copierea sau modificarea acestuia fără acordul scris al autorilor.

Încălcarea drepturilor de autor este o infracțiune și se pedepsește conform legii.

Comentarii 0

Autentifică-te pentru a putea comenta.

Autentifică-te