【C言語】2進数 8進数 16進数 形式で出力する方法【printf】


int型等の数値を0xff等の16進数形式や010等の8進数形式で出力する方法です。2進数形式(0b1101)でのフォーマットは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進数

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

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

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

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

広告