整数

もっとも簡単な定数は、整数です。整数は、私たちが普段使っている0~9までの数字で表現することができます。ただし、整数型の定数を画面に表示するにはprintf()関数で少し工夫をしなければなりません。printf()関数に渡すパラメータは文字列でなければなりませんでした。printf(100)というように、整数型の定数を渡すことはできません。そこで、書式指定フィールドを使います。

printf()関数に渡す文字列は、書式指定文字列と呼ばれる、文字列中に任意の整数や文字を挿入することができます。printf()関数は、%から始まる書式指定と呼ばれる構文を理解し、指定された部分に指定されたデータを挿入した結果を表示します。書式指定は、どのように値を表示するかを複雑に設定することも可能ですが、もっとも簡単な書式指定は%の直後に型を表す1文字を指定する方法です。整数型の値を文字列に埋め込むには%dを指定します。

printf()関数は、第1パラメータ以降、カンマで区切って任意の数のパラメータを与えることができます。第2パラメータ以降に指定された値は、文字列内の書式指定に従って文字列に埋め込まれます。たとえば、次のように値を表示することができます。

printf("Integer Constant=%d\n", 100);

上記の文を実行すると、結果は"Integer Constant=100"が表示され、書式指定文字列内の%dが第2パラメータに指定した整数型の定数100に置き換えられていることが分かります。これは、第2パラメータの値を整数型として印字せよと指示する書式指定なのです。書式指定文字列内に複数の書式指定があれば、printf()関数に指定するパラメータの数もそれに合わせます。

printf("Integer Constant=%d %d\n", 10, 100);

上記の場合、結果は"Integer Constant=10 100"となります。文字列の左側から書式指定が登場した順に、第2パラメータ、第3パラメータの値が使われています。

書式指定は%に続いて型を表す文字がきます。上記の%dは10進整数を表すもので、関数のパラメータに指定した値が、文字列の指定部分に10進数の整数として表示されています。他に、16進数で値を表示する%xと%Xという書式指定も存在します。%xは16進数に使われるアルファベットを小文字で表記し、%Xは大文字で表記します。

サンプル01

#include <stdio.h>

int main(void) {
    printf("10進数 %d\n", 100);
    printf("16進数小文字 %x\n", 220);
    printf("16進数大文字 %X\n", 220);
    return 0;
}

実行結果

10進数 100
16進数小文字 dc
16進数大文字 DC

サンプル01は、整数をprintf()関数で表示するプログラムです。printf()関数は、パラメータから渡した書式指定文字列に従って第2パラメータに指定した値を文字列に組み込んでくれます。実行結果を見ると、整数をそれぞれ10進数、小文字の16進数、大文字の16進数で、それぞれ表示されることが確認できいます。元の整数220は10進数による表記ですが、これを16進数に変換するとDCとなるため、結果は間違っていません。

整数型の定数そのものも、16進数で表記することが可能です。16進数の整数は、必ず0xから始まり、その後0~9までの数字とA~Fまでのアルファベットで表します。アルファベットは、小文字のa~fを使うことも可能で、それを組み合わせることもできます。しかし、通常は大文字化小文字で統一するべきでしょう。

0x10            /*16*/
0x5a            /*90*/
0xABCD    /*43981*/

上記は、すべて16進数表記の整数です。0xから始まる整数は16進数であると解釈されます。これはプログラミング言語上の表記の違いでしかなく、10進数も16進数も結果は純粋な値です。この値をどのように利用するかは自由なので、16進数で表記した整数をprintf()関数の書式指定で10進数として表示しても、何の問題もありません。

サンプル02

 #include <stdio.h>

int main(void) {
    printf("10進数=%d, 16進数=%X\n", 0x10, 0x10);
    printf("10進数=%d, 16進数=%X\n", 0xABCD, 0xABCD);
    printf("10進数=%d, 16進数=%X\n", 0x1aB, 0x1aB);
    return 0;
}

実行結果

10進数=16, 16進数=10
10進数=43981, 16進数=ABCD
10進数=427, 16進数=1AB

サンプル02は、16進数表記の整数を、それぞれ10進数と16進数で出力するプログラムです。

同じような方法で8進数表記の整数も可能です。8進数の整数は必ず0から始まり0~7までの数字を使って表記します。

010       /*8*/
0123    /*83*/

これも、10進数や16進数表記の整数と同様に、プログラミング言語上の表記の違いでしかありません。012も10も0xAも、すべて同じ整数の値です。