
C言語のきほん|書式指定を使って表示しよう
同じ数でも、見せ方を変えると意味が伝わりやすくなる。書式指定を使って、printf表示をレベルアップしよう。
C言語で printf を使うと、文字列をそのまま表示できます。
でも、printf の本当の便利さはそこから先にあります。
それが 書式指定(変換指定) です。
書式指定を使うと、整数や文字などの値を、目的に合わせた形で表示できます。
たとえば、同じ 123 という値でも、10進数で表示したり、8進数で表示したり、16進数で表示したりできます。
この機能を使えるようになると、デバッグのときにも、学習中の確認にも、とても役立ちます。
ここでは、printf の書式指定の基本を、特に整数の表示を中心にやさしく整理していきます。
サンプルプログラムは内容を少し変えて、日本語メッセージ・日本語コメントでわかりやすく説明していきます。
printf は文字列だけでなく値も表示できる
まず基本の確認です。
printf は、文字列をそのまま表示するだけなら次のように書けます。
printf("こんにちは\n");一方、変数の値や数値を埋め込んで表示したいときは、書式指定 を使います。
printf("数値は %d です\n", 123);この %d のような部分が書式指定です。
書式指定は、% と変換指定子を組み合わせて書きます。
書式指定の基本イメージ
printf の形をイメージで見ると、こんな感じです。
printf("ここに書式指定を書く", 表示したい値);たとえば、
printf("点数は %d 点です\n", score);なら、%d の位置に score の値が入って表示されます。
つまり、printf は
- どんな形で表示するか(書式文字列)
- 何を表示するか(値)
をセットで指定する関数です。
整数値でよく使う書式指定
今回のテーマでは、整数の表示を中心に使うので、まずはこの3つを押さえれば大丈夫です。
| 書式指定 | 意味 | 例(値が123のとき) |
|---|---|---|
| %d | 符号付き10進数で表示 | 123 |
| %o | 8進数で表示 | 173 |
| %x | 16進数(小文字)で表示 | 7b |
| %X | 16進数(大文字)で表示 | 7B |
ポイント
- %d は普段の10進数表示
- %o は8進数表示
- %x と %X は16進数表示(英字の大小が違う)
このあたりは、進数の学習とセットで使うと理解が深まります。
同じ値でも表示形式を変えられる
printf の大事なポイントは、値そのものは同じでも、表示形式だけを変えられる ことです。
たとえば、値が 123 でも、
- %d で表示 → 123
- %o で表示 → 173
- %x で表示 → 7b
のように見え方が変わります。
これは、プログラムの中の値が変わったわけではなく、表示のしかたを変えているだけ です。
この考え方は、今後のデバッグやビット操作の理解にもつながります。
サンプルプログラムで確認しよう
ファイル名:5_3_1.c
#include <stdio.h>
int main(void)
{
/* 表示したい整数値 */
int number = 26;
/* 同じ値をいろいろな進数で表示する */
printf("10進数で表示: %d\n", number);
printf("8進数で表示 : %o\n", number);
printf("16進数で表示: %x\n", number);
/* 1行にまとめて表示する */
printf("まとめ表示 → 10進:%d\t8進:%o\t16進:%x\n", number, number, number);
return 0;
}実行結果例
10進数で表示: 26
8進数で表示 : 32
16進数で表示: 1a
まとめ表示 → 10進:26 8進:32 16進:1aサンプルプログラムの解説
変数を使って表示している
int number = 26;今回は値を直接書くのではなく、int型の変数 number に入れています。
こうしておくと、あとで値を変えたくなったときに修正しやすいです。
書式指定に合わせて表示形式が変わる
printf("10進数で表示: %d\n", number);
printf("8進数で表示 : %o\n", number);
printf("16進数で表示: %x\n", number);ここでは同じ変数 number を使っていますが、書式指定を変えることで表示結果が変わっています。
- %d → 10進数
- %o → 8進数
- %x → 16進数
つまり、printf は「値をどう見せるか」を指定しているわけです。
1つの printf に複数の値を渡せる
printf("まとめ表示 → 10進:%d\t8進:%o\t16進:%x\n", number, number, number);書式文字列の中に %d、%o、%x が3つあるので、後ろにも値を3つ渡しています。
printf は、左から順番に 書式指定と値を対応させて表示します。
対応のイメージはこんな感じです。

書式指定を使うときの大事なルール
ここはとても大事なので、しっかり押さえておきたいポイントです。
書式指定の数と値の数をそろえる
たとえば、書式指定が2つあるのに値を1つしか渡さないと、正しく動きません。
良い例
printf("%d %d\n", 10, 20);悪い例
printf("%d %d\n", 10);書式指定の数と、後ろに渡す値の数は必ずそろえましょう。
型に合った書式指定を使う
今回の %d、%o、%x、%X は整数向けです。
int型の値を表示するときに使います。
たとえば、文字列には %s、小数には %f を使います。
型と書式指定がずれると、表示がおかしくなる原因になります。
%x と %X の違い
どちらも16進数を表示しますが、英字部分の表示が違います。
- %x → a, b, c, d, e, f(小文字)
- %X → A, B, C, D, E, F(大文字)
例として、26 を表示すると、
- %x → 1a
- %X → 1A
になります。
確認用の例
printf("小文字の16進数: %x\n", 26);
printf("大文字の16進数: %X\n", 26);表示を整えると読みやすくなる
書式指定は「値を出す」だけでなく、「見やすく整える」ためにも使います。
今回の例では \t を使って横に並べました。
printf("まとめ表示 → 10進:%d\t8進:%o\t16進:%x\n", number, number, number);このように、エスケープシーケンスの \t と書式指定を組み合わせると、見やすい表示を作りやすくなります。
printf は、表示の実験をしながら覚えるととても身につきやすいです。
よくあるミスと注意点
% と値の順番がずれる
書式指定の順番と、値の順番がずれると意図しない表示になります。
たとえば、書式文字列が
"%d %o %x"なら、後ろの値もその順番で対応します。
今回は同じ値を3回渡しているので影響が見えにくいですが、別の値を使うときは順番に注意しましょう。
8進数と16進数の表示結果にびっくりする
26 を %o で表示すると 32、%x で表示すると 1a になります。
最初は「値が変わった?」と感じるかもしれませんが、これは表示形式が変わっただけです。
内部の値は同じで、見せ方を変えているだけだと考えると整理しやすいです。
書式指定を文字列として書いてしまう
たとえば、%d をそのまま表示したいなら %% のような書き方が必要ですが、通常は %d は「変換指定」として働きます。
入門の段階では、まず %d は整数表示の合図と覚えておけば十分です。
実践問題
次の実行結果になるように、int型変数 code に初期化した値 31 を printf で表示してみましょう。
10進数、8進数、16進数をそれぞれ表示し、最後に1行でまとめて表示してください。
実行結果例
10進 : 31
8進 : 37
16進 : 1f
10進 : 31 8進 : 37 16進 : 1f解答例
ファイル名:5_3_2.c
#include <stdio.h>
int main(void)
{
/* 表示する値を変数に入れる */
int code = 31;
/* それぞれの進数で表示する */
printf("10進 : %d\n", code);
printf("8進 : %o\n", code);
printf("16進 : %x\n", code);
/* 1行にまとめて表示する */
printf("10進 : %d\t8進 : %o\t16進 : %x\n", code, code, code);
return 0;
}解説
この問題のポイントは、同じ変数 code を、書式指定だけ変えて表示している ところです。
- %d で 10進数表示
- %o で 8進数表示
- %x で 16進数表示
31 は進数を変えると次のように見えます。
- 31(10)
- 37(8)
- 1f(16)
最後の1行では、書式指定が3つあるので、後ろにも code を3回書いています。
printf は左から順に対応させるので、このように書けばきれいにまとめて表示できます。
学習を進めるコツ
書式指定は、printf を使いこなすための入口です。
最初は %d、%o、%x だけでも十分ですが、ここが理解できると、後で %f や %c や %s もスムーズに覚えられます。
おすすめの練習は、同じ値をいろいろな書式指定で表示してみることです。
たとえば 10、15、16、31、255 のような値で試すと、進数の変化がわかりやすくて楽しく学べます。
