Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 3902
  • Last Modified:

Converting Decimal to Binary

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
Steve3164
Asked:
Steve3164
1 Solution
 
jkrCommented:
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
 
itsmeandnobodyelseCommented:
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
 
itsmeandnobodyelseCommented:
You may remove these lines as i needed them on my IDE only:

>>     cin >> base;

>>           char c2[] = "0";

Regards, Alex

         
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
rstaveleyCommented:
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
 
H_KazemiCommented:
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
 
Steve3164Author Commented:
thanks itsmeandnobodyelse!!!

0

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now