Convert an integer to binary irrespective of platform.
The size of an integer varies from platform to platform. We assume the size of an integer either 32 bit or 64 bits in an application with respect to the working platform which leads to unexpected output.
The ideal solution is converting without assuming the size of an integer.
Please share your thoughts on this post in the comments section.
The ideal solution is converting without assuming the size of an integer.
Don't forget to include the standard library stdlib.h which supports malloc and free functions. Else you will get a warning incompatible implicit declaration of built-in function 'malloc'.
#include <stdio.h> #include <stdlib.h> //function declaration char *integer2binary(int n); int main() { //find how many bits are needed for the integer type. //sizeof() returns in bytes. So convert into bits. printf("Your integers are %u bits wide.\n\n", sizeof(int)*8); //An Array with integers int nums[13] = { 0, 1, 2, 3, -1, -2, -3, 255, 256, 1023, 1024, 8191, 8192 }; int index; for (index = 0; index < 13; index++) { //A character pointer which stores the converted binary number char *s = integer2binary(nums[index]); //Printing the binary number printf("%d -> %s\n", nums[index], s); //Free the memory for the next conversion free(s); } return 0; }
char *integer2binary(int n) -
char *integer2binary(int n) { // determine the number of bits needed ("sizeof" returns bytes) int nbits = sizeof(n) * 8; //malloc function is used to allocate a certain amount of memory char *s = malloc(nbits+1); // +1 for '' terminator s[nbits] = ''; // forcing evaluation as an unsigned value prevents complications // with negative numbers at the left-most bit unsigned int u = *(unsigned int*)&n; //declaring a temporary variable int temp; //left shift operator (<<) unsigned int mask = 1 << (nbits-1); // fill in values right-to-left for (temp = 0; temp < nbits; temp++) { s[temp] = ((u & mask) != 0) + '0'; //right shift operator (>>) mask >>= 1; } return s; }
Output -
Your result may not be same as in the screenshot shown here. Depends on number of bits wide of integer on your machine.
Please share your thoughts on this post in the comments section.
Very nice article.
ReplyDelete