6

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.

PC Luddite
  • 5,883
  • 6
  • 23
  • 39
Frank Tocci
  • 616
  • 2
  • 8
  • 20

3 Answers3

12

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.

PC Luddite
  • 5,883
  • 6
  • 23
  • 39
0

There isn't one. If you want to output in binary, just write code to do it.

David Schwartz
  • 179,497
  • 17
  • 214
  • 278
0

There is no direct way. One way, you could make a look-up table that converts a byte to a const char * of 1's and 0's. Then you could iterate through the bytes and print out what is in the look-up table.

Russley Shaw
  • 441
  • 2
  • 9