Decimal to binary in C

Created with Sketch.

 

Decimal to binary in C

Decimal to binary in C programming: C program to convert an integer from decimal number system (base-10) to binary number system (base-2). Size of an integer is assumed to be 32 bits. We will use the bitwise operator “AND” to perform the desired task. We right shift the original number by 31, 30, 29, …, 1, 0 bits using a for loop and bitwise AND the number obtained with 1(one), if the result is 1, then that bit is 1 otherwise it is 0 (zero).

C program to convert decimal to binary

#include <stdio.h>

int main()
{
int n, c, k;

printf(“Enter an integer in decimal number system\n);
scanf(“%d”, &n);

printf(“%d in binary number system is:\n, n);

for (c = 31; c >= 0; c)
{
k = n >> c;

if (k & 1)
printf(“1”);
else
printf(“0”);
}

printf(\n);

return 0;
}

Output of the program:
Decimal to binary C program output

This code only prints binary of an integer, but we may wish to perform operations on binary, so in the program below we are storing the binary in a string. We create a function which returns a pointer to string which is the binary of the number passed as an argument to the function.

C code to store decimal to binary conversion in a string

#include <stdio.h>
#include <stdlib.h>

char *decimal_to_binary(int);

main()
{
int n, c, k;
char *pointer;

printf(“Enter an integer in decimal number system\n);
scanf(“%d”,&n);

pointer = decimal_to_binary(n);
printf(“Binary string of %d is: %s\n, n, t);

free(pointer);

return 0;
}

char *decimal_to_binary(int n)
{
int c, d, count;
char *pointer;

count = 0;
pointer = (char*)malloc(32+1);

if (pointer == NULL)
exit(EXIT_FAILURE);

for (c = 31 ; c >= 0 ; c)
{
d = n >> c;

if (d & 1)
*(pointer+count) = 1 + ‘0’;
else
*(pointer+count) = 0 + ‘0’;

count++;
}
*(pointer+count) = \0;

return  pointer;
}

The memory is allocated dynamically because we can’t return a pointer to a local variable (character array in this case). If we return a pointer to a local variable, then the program may crash, or we get an incorrect result.

Leave a Reply

Your email address will not be published. Required fields are marked *