I have looked all over the place, but I have not found an answer to my question. First of all, I know that the symbol for decimal is %d
, the symbol for octal is %o
, and the symbol for hexadecimal is %x
. What I cannot find, however, is the symbol for binary. I would appreciate any help.
UPDATE: As of C23, the below function is no longer required. New format specifiers %b
and %B
have been added to printf() and friends to format integers as binary numbers—the former omitting any leading zeros and the latter including them (similar to %x
and %X
).
Original answer:
The reason you're having trouble finding a format specifier for printing integers in binary is because there isn't one. You'll have to write you're own function to print numbers in binary.
So for a single unsigned byte:
#include <stdio.h>
#include <limits.h>
void print_bin(unsigned char byte)
{
int i = CHAR_BIT; /* however many bits are in a byte on your platform */
while(i--) {
putchar('0' + ((byte >> i) & 1)); /* loop through and print the bits */
}
}
And for a standard unsigned int:
#include <stdio.h>
#include <limits.h>
void print_bin(unsigned int integer)
{
int i = CHAR_BIT * sizeof integer; /* however many bits are in an integer */
while(i--) {
putchar('0' + ((integer >> i) & 1));
}
}
Adjust the function for larger integers accordingly. Be wary of signed shifting though because the behavior is undefined and entirely compiler dependent.