Solved

Converting Decimal to Binary

Posted on 2004-08-05
6
3,895 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
Migrating Your Company's PCs

To keep pace with competitors, businesses must keep employees productive, and that means providing them with the latest technology. This document provides the tips and tricks you need to help you migrate an outdated PC fleet to new desktops, laptops, and tablets.

 
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

Back Up Your Microsoft Windows Server®

Back up all your Microsoft Windows Server – on-premises, in remote locations, in private and hybrid clouds. Your entire Windows Server will be backed up in one easy step with patented, block-level disk imaging. We achieve RTOs (recovery time objectives) as low as 15 seconds.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article describes how to use the timestamp of existing data in a database to allow Tableau to calculate the prior work day instead of relying on case statements or if statements to calculate the days of the week.
Skype is a P2P (Peer to Peer) instant messaging and VOIP (Voice over IP) service – as well as a whole lot more.
The goal of the video will be to teach the user the concept of local variables and scope. An example of a locally defined variable will be given as well as an explanation of what scope is in C++. The local variable and concept of scope will be relat…
With the power of JIRA, there's an unlimited number of ways you can customize it, use it and benefit from it. With that in mind, there's bound to be things that I wasn't able to cover in this course. With this summary we'll look at some places to go…

829 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