【C言語】2進数 8進数 16進数 出力フォーマット【printf】


16進数・8進数

printf関数での変換指定が可能です。

8進数の場合は変換指定子o、16進数の場合は変換指定子xを用います。 #フラグを追加することで基数を表すプレフィックス(0x, 0)を付与することが出来ます。

形式代替形式
16進数%x%#x
8進数%o%#o
10進数%d──
2進数────
// 16進数
printf("%x\n", 16);  //   10
printf("%#x\n", 16); // 0x10
// 8進数
printf("%o\n", 9);  //  11
printf("%#o\n", 9); // 011
// 10進数
printf("%d\n", 9);  // 9
printf("%#d\n", 9); // 9 // 警告:Flag '#' results in undefined behavior with 'd' conversion specifier

2進数

printf関数は2進数の変換指定には対応していないため、専用の関数を独自に定義する必要があります。

以下のコードはprintb関数の実装例です。より便利なputb関数もご用意しました。ご自由にお使いください。

void printb(unsigned int v) {
  unsigned int b = (int)1 << (sizeof(v) * CHAR_BIT - 1);
  do putchar(b & v ? '1' : '0'); while (b >>= 1);
}

void putb(unsigned int v) {
  putchar('0'), putchar('b'), printb(v), putchar('\n');
}
printb(9); // 00000000000000000000000000001001
putb(9); // 0b00000000000000000000000000001001

広告