954,483 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?

binary to decimal and decimal to binary functions

By Sinaru Gunawardena on May 6th, 2010 11:09 am

I wrote this code for fun. Wanted to do such a thing so that I would be able to use this in the future. I'm kinda new to this forum. I like to know what you think about the code. If can point out some mistakes or ways to improve the code, it would be great.. :)

#include <iostream>
#include <math.h>
using namespace std;

/* The following function coverts a binary value to an int value. You have to
 * input the binary value as a string to this function and then it will output
 * the int number of it. Characters other than 0 will treat as a 1 or true.
 */
int bin2dec(string binVal)
{
    int total = 0;
    int i=0;
    int length = binVal.length();
    int isMinus= false;

    if(binVal[0] == '-')
    {
        isMinus = true;
        length--;
        for(i=0; i<length;i++)
        {
            binVal[i] = binVal[i+1];
        }
    }

    for (i=0; i < length; i++)
    {

        if (binVal[length - (i + 1)] != '0')
            total = total + pow(2, i);
    }

    if(isMinus)
        total = total * (-1);

    return total;
}

/* The Following function can be used to convert an integral value to binary.
 * Provide the integral value to this function and it will output the related
 * binary value in a string format.
 */
string dec2bin(int decVal)
{
    string value = "";

    bool isMinus = false;

    if (decVal < 0)
    {
        isMinus = true;
        decVal = decVal * (-1);
    }

    while (decVal > 0)
    {
        if (decVal % 2)
            value = '1' + value;
        else
            value = '0' + value;

        decVal = decVal / 2;
    }

    if (isMinus)
        value = '-' + value;

    return value;

code is good but for decimal to binary conversion, it can get even better ........ multiply the remainders with powers of 10 from 0 onwards ....after dividing the dec number by 2 like we do while converting binary to dec.
the code gets even simpler for dec to binary conversion.

scott_dabas
Newbie Poster
9 posts since May 2010
Reputation Points: 8
Solved Threads: 1
 

Hi Sinaru :-)

Since I don't know how familiar you are with stuff like this I have too ask:

You represent a negative binary number as a positive binary number prefixed with a '-'. Is that your own intentional design or because you do not know the real way to represent negative numbers?

mbulow
Junior Poster in Training
50 posts since Dec 2009
Reputation Points: 20
Solved Threads: 23
 

Sorry for the delayed answer. I'm currently working on our final software project for the HND.

@mbulow: I used the - sign so that the common users would understand that it's a negative value. I didn't try to convert it into the way that computers hold the negative values.

@scott: Thnx for the info.. I will see about that.. :)

BTW I found a bug when converting dec2bin. That is if you password 0 as the integer value, the return value will be nothing. So I used another (else)if statement before the while loop to see if the int value is 0 and if it is then returns 0... :P

Sinaru
Newbie Poster
18 posts since Dec 2009
Reputation Points: 10
Solved Threads: 0
 

Here is a way to do it using metaprograming. That way you get the result before you
even start the program.

#include <iostream>


template<int binarySequence>
struct Binary{
	enum{ result = Binary<binarySequence/10>::result << 1 | binarySequence % 10 };
};
template<>
struct Binary<0>{
	enum{ result = 0 };
};

int main(){		
	using namespace std;
	cout << Binary<1>::result << endl; // outputs 2^0
	cout << Binary<10>::result << endl; // outputs 2^1
	cout << Binary<100>::result << endl; // outputs 2^2
	cout << Binary<1000>::result << endl; // outputs 2^3
	cout << Binary<10000>::result << endl; // outputs 2^4
	cout << Binary<10100>::result << endl; // outputs 20

}


I admit, that the formula used is not credited to me. Although the above works.
It does not have a error checking, for input that does not consists of 1's and 0's.

Isn't this so cool? You get the answer before you even run your program!

firstPerson
Senior Poster
3,923 posts since Dec 2008
Reputation Points: 841
Solved Threads: 608
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You
View similar articles that have also been tagged: