Solved

Converting Decimal to Binary

Posted on 2004-08-05
6
3,890 Views
Last Modified: 2013-11-15
My program transforms decimal numbers to binary representation.  But I need it to transform it to 16 bit binary representation, mine only transforms to regular binary.
For example,  Mine: 25 = 11001 but it should be 0000000000011001.  This is my program:
#include <iostream>

using namespace std;

void dectobin(int num, int base);

int main()
{
      int decimalnum;
      int base;

      base = 2;

      cout<<"Enter the number in decimal: ";
      cin>>decimalnum;
      cout<<endl;
      cout<<"Decimal: "<<decimalnum<<" = ";
      dectobin(decimalnum, base);
      cout<< " Binary" <<endl;

      return 0;

}
void dectobin(int num, int base)
{
      if(num > 0)
      {
            dectobin(num/base, base);
            cout<<num % base;
      }
}
What do I have to do to make it print out the remaining digits?  Please Advise
0
Comment
Question by:Steve3164
6 Comments
 
LVL 86

Expert Comment

by:jkr
ID: 11728066
You could easily do that by switching from a recursive function to a 'linear one, e.g.

void
dectobin (unsigned int b) {

unsigned int mask, count;

      for ( count = 0, mask = 0x80000000; mask != 0; mask = ( mask >> 1)) {

            if ( b & mask) {

                  cout << 1;

            } else {

                  cout << 0;
            }
      }
}
0
 
LVL 39

Accepted Solution

by:
itsmeandnobodyelse earned 250 total points
ID: 11728199
Try this:

void dectobin(int num, int base, int count = 0);

int main()
{
     int decimalnum;
     int base;

     base = 2;

     cout<<"Enter the number in decimal: ";
     cin>>decimalnum;
     cout<<endl;
     cout<<"Decimal: "<<decimalnum<<" = ";
     dectobin(decimalnum, base);
     cout<< " Binary" <<endl;
     cin >> base;
     return 0;

}
void dectobin(int num, int base, int count)
{
     if(num > 0 || count < 16)
     {
          dectobin(num/base, base, ++count);
          cout<<num % base;
          char c2[] = "0";
     }
}

Regards, Alex
0
 
LVL 39

Expert Comment

by:itsmeandnobodyelse
ID: 11728225
You may remove these lines as i needed them on my IDE only:

>>     cin >> base;

>>           char c2[] = "0";

Regards, Alex

         
0
Complete VMware vSphere® ESX(i) & Hyper-V Backup

Capture your entire system, including the host, with patented disk imaging integrated with VMware VADP / Microsoft VSS and RCT. RTOs is as low as 15 seconds with Acronis Active Restore™. You can enjoy unlimited P2V/V2V migrations from any source (even from a different hypervisor)

 
LVL 17

Expert Comment

by:rstaveley
ID: 11730745
std::bitset<> is nice for this:
--------8<--------
#include <iostream>
#include <bitset>

int main(int argc,const char *argv[])
{
      std::cout << std::bitset<16>(atoi(*++argv)) << '\n';
}
--------8<--------
0
 

Expert Comment

by:H_Kazemi
ID: 11745686
Hi steve3164!
It is far better to use a direct method to do this rather simple function instead of a recursive one; because as you may know recursive functions are very inefficient due to their excessive use of stack memory as well as their low speed.
This piece of code can do what you need. I have used unsigned short int instead of unsigned int because you are using 16 bit data:

#include <iostream.h>

void dectobin(unsigned short int num);

void main(void)
{
    unsigned short int number;
    cout<<"Enter a decimal integer: ";
    cin>>number;
    cout<<"\nBinary representation: ";
    dectobin(number);
    cout<<endl;
}

void dectobin(unsigned short int num)
{
    unsigned int powerOf2=0x8000;
    while (powerOf2!=0)
    {
        if (num>=powerOf2)
        {
            num^=powerOf2;  //Equivalent to num-= powerOf2;
            cout<<1;
        }
        else
            cout<<0;
        powerOf2=powerOf2>>1;
    }
}
0
 

Author Comment

by:Steve3164
ID: 11747820
thanks itsmeandnobodyelse!!!

0

Featured Post

Highfive Gives IT Their Time Back

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Let’s list some of the technologies that enable smooth teleworking. 
In this article, you will read about the trends across the human resources departments for the upcoming year. Some of them include improving employee experience, adopting new technologies, using HR software to its full extent, and integrating artifi…
The goal of the video will be to teach the user the difference and consequence of passing data by value vs passing data by reference in C++. An example of passing data by value as well as an example of passing data by reference will be be given. Bot…
The viewer will learn how to successfully create a multiboot device using the SARDU utility on Windows 7. Start the SARDU utility: Change the image directory to wherever you store your ISOs, this will prevent you from having 2 copies of an ISO wit…

744 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now