Steve3164
asked on
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
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
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
You may remove these lines as i needed them on my IDE only:
>> cin >> base;
>> char c2[] = "0";
Regards, Alex
>> cin >> base;
>> char c2[] = "0";
Regards, Alex
std::bitset<> is nice for this:
--------8<--------
#include <iostream>
#include <bitset>
int main(int argc,const char *argv[])
{
std::cout << std::bitset<16>(atoi(*++ar gv)) << '\n';
}
--------8<--------
--------8<--------
#include <iostream>
#include <bitset>
int main(int argc,const char *argv[])
{
std::cout << std::bitset<16>(atoi(*++ar
}
--------8<--------
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;
}
}
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;
}
}
ASKER
thanks itsmeandnobodyelse!!!
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;
}
}
}