binary to decimal convertor

mvmalderen 0 Tallied Votes 209 Views Share

This snippet allows you to convert a text representation(*) of a binary number to a decimal number :)

(*): With 'text representation' I mean for example a string containing "1001" or "10001110011", etc. ...

#include <iostream>
#include <string>

using namespace std;

unsigned int pow(unsigned int a, unsigned int n);

int main()
{
    string binary;
    unsigned int decimal = 0;
	
    cout << "Enter a binary number: ";
    cin >> binary;

    for(int i = binary.length()-1; i >= 0; i--) {
        if(binary[i] > '1' || binary[i] < '0') {
            cout << "Invalid binary number!" << endl;
            return 1;
        } else {
            decimal += (binary[i] - '0') * pow(2, (binary.length()-i-1));
        }
    }
	
    cout << "Decimal: " << decimal << endl;	
    return 0;
}

unsigned int pow(unsigned int a, unsigned int n)
{
    unsigned int r = 1;
    while( n-- > 0 ) r *= a;
    return r;
}
amrith92 119 Junior Poster

Nice code! But maybe the function name pow should be changed, to avoid any ambiguity caused if anybody chooses to include <cmath> with that :) ...

mvmalderen 2,072 Postaholic

Yep, there you've got a point!
For those who are using the cmath library:
Change the name of the pow function to apow/mypow/pow2 or whatever you like :P

William Hemsworth 1,339 Posting Virtuoso

Here's how I would have done it:

#include <iostream>
using namespace std;

int main() {
  char binary[33]; // 32bit + '\0'
  unsigned int decimal = 0;

  cout << "Enter binary:\n> ";

  cin.getline( binary, 32 );
  unsigned int exp = 1;

  for (int i = (int)strlen( binary ) - 1; i >= 0; --i) {
    if ( binary[i] == '1' )
      decimal += exp;

    exp <<= 1;
  }

  cout << "\nDecimal:\n> " << decimal;

  cin.ignore();
}
mvmalderen 2,072 Postaholic

I'm glad to know that there was actually no need for a separate function like pow, the bit shifting is a superior method to multiplicate it every time by two!
And William, your program will threat any other value than '1' as a '0', this isn't wrong IMO, but I only wanted to let you know in case you didn't (but probably you did know this already, because you're always one step ahead :))
I learned again from your code, you're superior in writing efficient and very easy to understand code :) !!

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.