C言語のきほん|C言語の定数の基本

変数に入る値にはルールがある。C言語の定数を知ると、コードの意味がはっきり見えてくる。

前の節では、変数はデータを入れておく箱であり、初期化や代入で値を入れることを学びました。
では、その「入れる値」そのものは、C言語では何と呼ぶのでしょうか。

それが 定数 です。

変数が「あとから値を変えられる入れ物」なのに対して、定数はソースコードに直接書く 固定の値 です。
たとえば 123 や 3.14 や A や こんにちは のような値は、プログラム中では定数として扱われます。

このパートでは、C言語でよく使う定数を、次のように整理しながら見ていきます。

  • 整数定数(10進数、8進数、16進数)
  • 浮動小数点定数(小数、指数形式)
  • 文字定数
  • 文字列リテラル

ここは、これから先の計算・文字処理・入出力の土台になる大事なところです。
最初は「名前が多いな」と感じるかもしれませんが、実際にコード例と一緒に見ていくとすぐ慣れます。
まずは、定数は「ソースコードに直接書く値」 という感覚をしっかりつかんでいきましょう。

変数と定数の違いをイメージしよう

まずは、いちばん大事な違いをはっきりさせておきましょう。

例:

int number = 123;

この1行の中には、変数と定数の両方が出てきます。

  • number → 変数(値を入れる箱)
  • 123 → 定数(ソースコードに書いた固定の値)

図でイメージ

ここでの 123 は、ソースコード上で 123 と書かれている固定の値です。
number はあとから 200 に変えたり 0 にしたりできますが、ソースコードに書いた 123 自体は「その場では固定の値」です。

定数の種類を先に一覧で見よう

C言語の定数は、主に次のように分類できます。
本文の表を、見やすく整理してまとめます。

主な定数の分類

分類種類表記方法
整数定数10進定数ふつうの整数123
整数定数8進定数先頭に00173
整数定数16進定数先頭に0xまたは0X0x7b, 0X7B
浮動小数点定数10進小数小数点を使う3.14
浮動小数点定数指数形式e または E を使う1.23e-12
浮動小数点定数16進浮動小数点(C99以降)0x + p/P 指数0xa.fp-10
文字定数1文字シングルクォーテーションで囲む'A', '\n'
文字列リテラル文字列ダブルクォーテーションで囲む"ABC", "computer"

ここではまず、よく使うものから順番に覚えるのがおすすめです。

特によく使うのは次の4つです。

  • 10進整数定数(123)
  • 10進浮動小数点定数(3.14)
  • 文字定数('A')
  • 文字列リテラル("ABC")

サンプルプログラム: 定数の種類を表示してみる

定数の種類をまとめて確認できるシンプルなプログラム例です。

ファイル名:4_4_1.c

// いろいろな定数を表示するプログラム
#include <stdio.h>

int main(void)
{
    printf("10進整数定数: %d\n", 123);
    printf("8進整数定数 0173 を10進で表示: %d\n", 0173);
    printf("16進整数定数 0x7B を10進で表示: %d\n", 0x7B);

    printf("浮動小数点定数: %.2f\n", 3.14);
    printf("指数形式の浮動小数点定数: %e\n", 1.23e-12);

    printf("文字定数: %c\n", 'A');
    printf("文字列リテラル: %s\n", "C言語を学習中です");

    return 0;
}

実行結果例

10進整数定数: 123
8進整数定数 0173 を10進で表示: 123
16進整数定数 0x7B を10進で表示: 123
浮動小数点定数: 3.14
指数形式の浮動小数点定数: 1.230000e-12
文字定数: A
文字列リテラル: C言語を学習中です

このプログラムでは、同じ 123 でも表記の仕方を変えると「8進」「16進」として書けることが確認できます。

整数定数を理解しよう

整数定数は、整数の値をそのまま書く定数です。
C言語では、10進数だけでなく 8進数・16進数でも書ける のが特徴です。

10進定数

これはいちばん普段どおりの書き方です。

123
456
2026

特別なルールはほとんどなく、普段の整数と同じ感覚で使えます。
最初はこの10進定数を中心に使っていけば大丈夫です。

8進定数

8進定数は、先頭に 0 を付ける ことで表します。

0173

これは 10進数の 173 ではなく、8進数の 173 という意味です。
8進数の 173 は、10進数に直すと 123 になります。

ここはとても大事(注意)

けた合わせのつもりで 0123 のように先頭に 0 を付けると、C言語では 8進数として解釈されます。

つまり、

  • 123 → 10進数の123
  • 0123 → 8進数の123(10進数では83)

のように、意味が変わってしまいます。

初心者のうちは、10進数に先頭の0を付けない と覚えておくと安心です。

16進定数

16進定数は、先頭に 0x または 0X を付ける ことで表します。

0x7b
0X7B

どちらも同じ意味で、10進数の 123 を表します。
16進数は、メモリダンプや色コード、ビット操作の場面などでよく使われます。

16進数で使う文字

16進数では 0〜9 に加えて、A〜F(または a〜f)を使います。

  • A = 10
  • B = 11
  • C = 12
  • D = 13
  • E = 14
  • F = 15

整数定数の比較表(よく使う例)

表記種類10進での値
12310進定数123
01738進定数123
0x7B16進定数123

同じ値でも、表現方法を変えられるのがC言語の特徴です。
ただし、最初は無理に使い分けなくて大丈夫です。必要になったら使う、でOKです。

浮動小数点定数を理解しよう

浮動小数点定数は、小数を表す定数です。
たとえば 3.14 や 0.5 のような値ですね。

10進浮動小数点定数(小数点形式)

いちばんよく使うのは、小数点を含む書き方です。

3.14
0.5
12.0

小数点があることで、整数定数ではなく浮動小数点定数として扱われます。

10進浮動小数点定数(指数形式)

とても大きい数やとても小さい数は、指数形式で書けます。
e または E を使って、10の何乗かを表します。

1.23e-12
1.23E-12

これはどちらも同じ意味で、

1.23 × 10-12

を表します。

指数形式のイメージ

科学計算や非常に小さい値・大きい値を扱うときに便利です。

16進浮動小数点定数(C99以降)

これは少し特殊な表記です。
一般的な初学者向けのコードでは、ほとんど使いません。

0xa.fp-10
0XA.FP-10

これは 16進数の小数表現 + 2のべき乗指数で書く形式です。
指数部が e/E ではなく p/P になるのがポイントです。

覚え方(初学者向け)

  • 存在は知っておく
  • すぐ使えなくても大丈夫
  • 実務や特殊な用途で必要になることがある

今の段階では、10進の小数点形式と指数形式が使えれば十分です。

文字定数と文字列リテラルの違い

ここはとても大事です。
見た目が似ていますが、意味が違います。

文字定数

文字定数は、1文字 を表す定数で、シングルクォーテーションで囲みます。

'A'
'\n'
  • 'A' は文字 A
  • '\n' は改行を表す特殊な文字(エスケープシーケンス)

文字定数のポイント

  • 1文字を表す
  • シングルクォーテーションを使う
  • printf では %c で表示することが多い

文字列リテラル

文字列リテラルは、文字の並び(文字列) を表す定数で、ダブルクォーテーションで囲みます。

例:

"ABC"
"computer"
"こんにちは"

文字列リテラルのポイント

  • 複数文字を表せる
  • ダブルクォーテーションを使う
  • printf では %s で表示することが多い

文字定数と文字列リテラルの比較表

種類囲み方使い方のイメージ
文字定数'A'シングルクォーテーション1文字
文字列リテラル"A"ダブルクォーテーション文字列(1文字以上)

ここで大事なのは、'A' と "A" は別物 だということです。
見た目は似ていますが、C言語では型も用途も違います。

定数は初期化や代入でよく使う

定数は、前の節で学んだ初期化や代入の場面でよく使います。

初期化で使う例

int score = 80;
double pi = 3.14;
char grade = 'A';

代入で使う例

score = 90;
pi = 3.14159;
grade = 'B';

このように、定数は「変数に入れる値」として頻繁に登場します。

ちょっと注意したいポイント(初心者向け)

➀ 先頭の0に注意(8進数になる)

これは本文でも特に大事な注意点です。

int a = 123;   // 10進数の123
int b = 0123;  // 8進数の123(10進数では83)

見た目が似ているので、かなり間違えやすいです。
10進数を書きたいときは、先頭に 0 を付けないようにしましょう。

➁ 'A' と "A" を混同しない

  • 'A' は文字定数
  • "A" は文字列リテラル

この違いは、printf の書式指定子にも関係します。

  • %c → 文字
  • %s → 文字列

printf("%c\n", 'A');
printf("%s\n", "A");

どちらも表示は A ですが、中身の意味は違います。

➂ 小数は浮動小数点誤差があることを思い出そう

前の記事で学んだように、3.14 や 0.2 のような小数は、内部では誤差を含むことがあります。
定数として書いても、その性質は同じです。

なので、浮動小数点定数は「厳密にぴったりではないことがある」と意識して使うのが大事です。

定数の種類を確認するミニサンプル

最後に、学習用として見やすいミニサンプルをもう1つ載せます。

ファイル名:4_4_2.c

// 定数の種類を確認するプログラム
#include <stdio.h>

int main(void)
{
    int decimal_value = 123;      // 10進整数定数
    int octal_value = 0173;       // 8進整数定数(10進では123)
    int hex_value = 0x7B;         // 16進整数定数(10進では123)

    double pi = 3.14;             // 浮動小数点定数(小数点形式)
    double tiny = 1.23e-12;       // 浮動小数点定数(指数形式)

    char symbol = 'A';            // 文字定数

    printf("10進: %d\n", decimal_value);
    printf("8進: %d\n", octal_value);
    printf("16進: %d\n", hex_value);

    printf("pi = %.2f\n", pi);
    printf("tiny = %e\n", tiny);

    printf("文字定数 = %c\n", symbol);
    printf("文字列リテラル = %s\n", "定数の確認ができました");

    return 0;
}

まとめ

このパートでは、C言語の定数の基本を整理しました。

  • 定数はソースコードに直接書く固定の値
  • 変数は値を入れる箱、定数は箱に入れる中身
  • 整数定数には 10進・8進・16進 がある
  • 浮動小数点定数には小数点形式と指数形式がある
  • 文字定数は シングルクォーテーション
  • 文字列リテラルは ダブルクォーテーション

最初は種類が多く見えますが、よく使うのはまずこのあたりです。

  • 123(整数定数)
  • 3.14(浮動小数点定数)
  • 'A'(文字定数)
  • "ABC"(文字列リテラル)

ここをしっかり押さえておくと、これからの変数・演算・表示の学習がかなりスムーズになります。
次のコードを書くときは、ぜひ「これは変数かな?定数かな?」と意識しながら見てみてください。