Search code examples
cbinarysymbols

What is the format specifier for binary in C?


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.


Solution

  • 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.