# Decimal to Binary conversion

Convert a decimal (denary) integer to a binary string. An exercise in do ... while and while loops.

1,622 Views
About the Author

Scientist

``````// Convert a decimal integer do a binary string
// added a test printf() you can remove later
// Turbo C modified for Pelles C     vegaseat    19nov2004

#include <stdio.h>

void dec2bin(long decimal, char *binary);

int main()
{
long decimal;
char binary;

printf("\n\n Enter an integer value : ");
scanf("%ld",&decimal);
dec2bin(decimal,binary);
printf("\n The binary value of %ld is %s \n",decimal,binary);

getchar();  // trap enter
getchar();  // wait
return 0;
}

//
// accepts a decimal integer and returns a binary coded string
//
void dec2bin(long decimal, char *binary)
{
int  k = 0, n = 0;
int  neg_flag = 0;
int  remain;
int  old_decimal;  // for test
char temp;

// take care of negative input
if (decimal < 0)
{
decimal = -decimal;
neg_flag = 1;
}
do
{
old_decimal = decimal;   // for test
remain    = decimal % 2;
// whittle down the decimal number
decimal   = decimal / 2;
// this is a test to show the action
printf("%d/2 = %d  remainder = %d\n", old_decimal, decimal, remain);
// converts digit 0 or 1 to character '0' or '1'
temp[k++] = remain + '0';
} while (decimal > 0);

if (neg_flag)
temp[k++] = '-';       // add - sign
else
temp[k++] = ' ';       // space

// reverse the spelling
while (k >= 0)
binary[n++] = temp[--k];

binary[n-1] = 0;         // end with NULL
}``````

good one

vegaseat 1,735

Vielen Dank Herr harshchandra!

nice doc,

but some more comments about program would help us more in understanding the program.;)

I love the code samples on the site, I've been a long time reader and never posted anything so I figured I should contribute something (even if it sucks).

Anyhow people who teach programming like to use this exercise to teach the basics of loops, arrays and input parsing. As for the actual binary conversion, you can also do it with bit shifting but it tends to make for messy code. Here's a quick example:

``````void dec2bin(long i)
{
char* str; char* p;

str = malloc( sizeof(long)*8*sizeof(char) );
p = str;
while( i > 0 )
{
/* bitwise AND operation with the last bit */
(i & 0x1) ? (*p++='1') : (*p++='0');
/* bit shift to the right, when there are no
bits left the value is 0, so the loop ends */
i >>= 1;
}
while( p-- != str ) /* print out the result backwards */
printf("%c",*p);

free(str);
}``````

here is a recursion program for the same purpose its quite a bit shorter:

``````#include<stdio.h>
#include<conio.h>
void showbits(int h)
{
if(h==1)
printf("%d",h);
else
{
showbits(h/2);
printf("%d",h%2);
}
}
void main()
{
int nu;
void showbits(int h);
clrscr();
printf("Num?");scanf("%d",&nu);
printf("\nBin eq of %d is ",nu);
showbits(nu);
getch();
}``````

Really nice Idea I was searching for the formula to change from digit to binary,

but please guys could you type some comments in the codes to understand them?

ksj 0

Sorry if this is a dumb question, but why use char string and not integer array to store the binary number?
And if i want to use the obtained binary number for further calculations, how is it possible with char string?

recrox,what is showbits for?

arun26 -4
``````main()
{
int i,c=0,sum=0;
scanf("%d",&i);
while(i>=0)
{
i=i%2;
sum=sum+i*pow(10,c);
i=i/2;
c++
}
printf("%d",sum);
}``````
Salem commented: total waste of effort - to post, as well as to read. -4
Be a part of the DaniWeb community

We're a friendly, industry-focused community of 1.21 million developers, IT pros, digital marketers, and technology enthusiasts learning and sharing knowledge.