
C言語の基本|整数・小数・文字の定数
ソースコードに直接書く値にも種類がある。定数の表し方を知って、数字と文字を正しく使い分けよう。
これまでの学習では、変数を宣言し、初期化や代入によって値を保存する方法を確認しました。
たとえば、次のコードでは、int型のnumberという変数へ123を入れています。
int number = 123;この1行には、変数と、その変数へ入れる値の両方が書かれています。
- numberは値を保存する変数
- 123はソースコードへ直接書かれた整数定数
変数は、プログラムの実行中に値を変更できます。一方、123はソースコード上へ直接書かれた固定の値です。
C言語では、数値や文字をソースコードへ直接書くときにも、その種類に合った表記方法があります。
このパートでは、次の定数やリテラルを詳しく見ていきます。
- 10進数で書く整数定数
- 8進数で書く整数定数
- 16進数で書く整数定数
- 小数点形式の浮動小数点定数
- 指数形式の浮動小数点定数
- C99以降で使える16進浮動小数点定数
- 1文字を表す文字定数
- 文字の並びを表す文字列リテラル
- 改行などを表すエスケープシーケンス
種類が多いように見えますが、最初によく使うのは123、3.14、'A'、"ABC"の4つです。
まずは、ソースコードへ直接書かれた値にも種類と書き方のルールがあることをつかんでいきましょう。
変数と定数の違い
変数は、値を保存しておくための名前付きの入れ物です。
int number = 123;このコードでは、numberが変数、123が整数定数です。
変数numberには、後から別の値を代入できます。
number = 200;さらに、0を代入することもできます。
number = 0;numberへ保存される値は、代入によって123から200、200から0へ変化します。
一方、ソースコードに書かれた123や200は、それぞれの場所に直接記述された値です。プログラムの実行中に、ソースコード上の123そのものが200へ書き換わるわけではありません。
| 要素 | 例 | 役割 |
|---|---|---|
| 変数 | number | 値を保存する名前付きの入れ物 |
| 整数定数 | 123 | ソースコードに直接書かれた整数 |
| 浮動小数点定数 | 3.14 | ソースコードに直接書かれた小数 |
| 文字定数 | 'A' | ソースコードに直接書かれた1文字 |
| 文字列リテラル | "ABC" | ソースコードに直接書かれた文字の並び |
このようなソースコード上の値は、変数の初期化、代入、計算、条件の指定、printfによる表示などで使われます。
constを付けた変数との違い
C言語では、constを付けて、初期化後に変更できないオブジェクトを宣言することもできます。
const int maximum_score = 100;このコードでは、maximum_scoreがconstで修飾された変数、100が整数定数です。
どちらも変更しない値のように見えますが、役割は異なります。
| 種類 | 例 | 意味 |
|---|---|---|
| 整数定数 | 100 | ソースコードへ直接書いた整数 |
| constを付けた変数 | maximum_score | 100を保存している名前付きの領域 |
このパートでは、主に123や3.14など、ソースコードへ直接記述する値について見ていきます。
図1:変数は箱、定数は箱へ入れる値

この図から分かること
変数numberは、値を保存する箱のような役割を持っています。123は、その箱へ入れるためにソースコードへ直接書かれた整数定数です。
numberへ200を代入すると、変数に保存されている値は123から200へ変わります。しかし、ソースコードに記述された123という表記自体が、実行中に書き換えられるわけではありません。
定数の種類を一覧で確認しよう
C言語で扱う主な定数と文字列リテラルは、次のように分類できます。
| 分類 | 種類 | 表記方法 | 例 |
|---|---|---|---|
| 整数定数 | 10進整数定数 | 通常の整数として書く | 123 |
| 整数定数 | 8進整数定数 | 先頭に0を付ける | 0173 |
| 整数定数 | 16進整数定数 | 先頭に0xまたは0Xを付ける | 0x7B |
| 浮動小数点定数 | 小数点形式 | 小数点を使う | 3.14 |
| 浮動小数点定数 | 指数形式 | eまたはEを使う | 1.23e-12 |
| 浮動小数点定数 | 16進形式 | 0xとpまたはPを使う | 0xA.Fp-10 |
| 文字定数 | 1文字 | 単一引用符で囲む | 'A' |
| 文字定数 | 特殊文字 | エスケープシーケンスを使う | '\n' |
| 文字列リテラル | 文字の並び | 二重引用符で囲む | "ABC" |
特に使用する機会が多いのは、次の4種類です。
- 123のような10進整数定数
- 3.14のような浮動小数点定数
- 'A'のような文字定数
- "ABC"のような文字列リテラル
さまざまな定数を表示するプログラム
最初のプログラムでは、整数、浮動小数点数、文字、文字列をprintfで表示します。
整数・小数・文字・文字列をまとめて表示するプログラム
ファイル名:4_4_1.c
// 整数・小数・文字・文字列をまとめて表示するプログラム
#include <stdio.h>
int main(void)
{
printf("10進整数定数:%d\n", 125);
printf("8進整数定数0175を10進数で表示:%d\n", 0175);
printf("16進整数定数0x7Dを10進数で表示:%d\n", 0x7D);
printf("浮動小数点定数:%.2f\n", 2.75);
printf("指数形式の浮動小数点定数:%e\n", 4.50e-8);
printf("文字定数:%c\n", 'B');
printf("文字列リテラル:%s\n", "C言語の定数を学習しています");
return 0;
}実行結果の例
10進整数定数:125
8進整数定数0175を10進数で表示:125
16進整数定数0x7Dを10進数で表示:125
浮動小数点定数:2.75
指数形式の浮動小数点定数:4.500000e-08
文字定数:B
文字列リテラル:C言語の定数を学習していますこのプログラムでは、10進数、8進数、16進数という異なる表記で、同じ125を表しています。
また、小数点形式と指数形式の浮動小数点定数、1文字を表す文字定数、複数の文字を表す文字列リテラルも確認できます。
10進整数定数を表示する
最初のprintfでは、125を10進整数定数として使用しています。
printf("10進整数定数:%d\n", 125);125は、普段使っている10進数の書き方です。
%dを使うことで、10進整数として表示しています。
8進整数定数を10進数で表示する
次のprintfでは、0175を使用しています。
printf("8進整数定数0175を10進数で表示:%d\n", 0175);先頭に0が付いているため、0175は8進整数定数です。
8進数の175を10進数へ変換すると、次のようになります。
1 × 82 + 7 × 81 + 5 × 80
= 64 + 56 + 5
= 125
printfでは%dを使用しているため、実行結果には10進数の125と表示されます。
16進整数定数を10進数で表示する
次のprintfでは、0x7Dを使用しています。
printf("16進整数定数0x7Dを10進数で表示:%d\n", 0x7D);先頭に0xが付いているため、0x7Dは16進整数定数です。
16進数では、Dが10進数の13を表します。
7 × 161 + 13 × 160
= 112 + 13
= 125
この値も%dで表示しているため、実行結果では125になります。
整数定数には複数の表記方法がある
整数定数とは、小数部分を持たない整数をソースコードへ直接書いたものです。
C言語では、主に次の3種類の表記を使用できます。
| 表記方法 | 基数 | 例 | 10進数での値 |
|---|---|---|---|
| 10進整数定数 | 10 | 125 | 125 |
| 8進整数定数 | 8 | 0175 | 125 |
| 16進整数定数 | 16 | 0x7D | 125 |
同じ値でも、用途に応じて表記方法を選べます。
10進整数定数
10進整数定数は、普段の整数と同じように書きます。
123
456
2026
10進数では、0から9までの数字を使います。
特別な接頭辞は必要ありません。
int year = 2026;
int student_count = 30;
int temperature = -5;- 2026は正の整数
- 30も正の整数
- -5は負の値
厳密には、-5全体が1つの整数定数なのではなく、整数定数5へ単項マイナス演算子-を適用した式です。初心者の段階では、負の整数を表す一般的な書き方として理解しておけば大丈夫です。
8進整数定数
8進整数定数は、先頭に0を付けて書きます。
0175
8進数で使用できる数字は、0から7までです。
| 使用できる数字 | 0、1、2、3、4、5、6、7 |
|---|---|
| 使用できない数字 | 8、9 |
そのため、次の表記は8進整数定数として正しくありません。
08
09
先頭の0によって8進数として解釈されますが、8進数には8と9が存在しないため、コンパイルエラーになります。
先頭の0には注意する
10進数の桁をそろえるつもりで先頭に0を付けると、値の意味が変わる場合があります。
int first_value = 123;
int second_value = 0123;first_valueへ入るのは、10進数の123です。
second_valueへ入るのは、8進数の123です。10進数では83になります。
| 表記 | C言語での解釈 | 10進数での値 |
|---|---|---|
| 123 | 10進整数定数 | 123 |
| 0123 | 8進整数定数 | 83 |
10進整数として書きたい場合は、必要のない先頭の0を付けないようにしましょう。
16進整数定数
16進整数定数は、先頭に0xまたは0Xを付けます。
0x7D
0X7D
xを小文字で書いても、Xを大文字で書いても意味は同じです。
16進数では、0から9に加えてAからFを使用します。
| 16進数の文字 | 10進数での値 |
|---|---|
| Aまたはa | 10 |
| Bまたはb | 11 |
| Cまたはc | 12 |
| Dまたはd | 13 |
| Eまたはe | 14 |
| Fまたはf | 15 |
次の4つは、すべて同じ値を表します。
0x7d
0x7D
0X7d
0X7D
16進数は、メモリ上の値、ビットの並び、文字コード、色の値などを扱う場面でよく使われます。
図2:10進・8進・16進で同じ整数を表す

この図から分かること
10進数の125、8進数の0175、16進数の0x7Dは、表記方法は違いますが、同じ値を表しています。
C言語は整数定数の先頭を見て、どの進数で書かれているのかを判断します。
- 接頭辞のない125は10進整数定数
- 先頭が0の0175は8進整数定数
- 先頭が0xの0x7Dは16進整数定数
特に注意したいのは、10進数の桁をそろえるために先頭へ0を付けると、8進数として解釈されることです。
浮動小数点定数は小数を表す
浮動小数点定数は、小数を含む値をソースコードへ直接書いたものです。
代表的な書き方は、次のとおりです。
3.14
0.5
12.0
小数点を含むことで、整数定数ではなく浮動小数点定数として扱われます。
int count = 12;
double distance = 12.0;12は整数定数です。
12.0は浮動小数点定数です。
見た目の値は近くても、C言語では異なる種類の定数として扱われます。
小数点形式の浮動小数点定数
小数点を使う形式は、日常的な小数と同じように書けます。
3.14
0.25
18.5
100.0
変数の初期化にも使用できます。
double temperature = 24.5;
double distance = 12.75;
double average_score = 82.5;printfでdouble型の値を表示するときは、%fを使用します。
printf("%f\n", 3.14);小数点以下の表示桁数を指定する場合は、%.2fなどを使用します。
printf("%.2f\n", 3.14);実行結果は次のようになります。
3.14指数形式の浮動小数点定数
非常に大きな値や非常に小さな値は、指数形式で書くと分かりやすくなります。
1.23e-12
1.23E-12
eとEのどちらを使っても意味は同じです。
1.23e-12は、次の値を表します。
1.23 × 10-12
指数部分が正の場合は、大きな値を表せます。
2.5e6
これは、次の値を表します。
2.5 × 106
10進数で表すと2500000です。
指数部分が負の場合は、小さな値を表します。
4.5e-8
これは、次の値を表します。
4.5 × 10-8
指数形式の主な構成は、次のとおりです。
| 部分 | 例 | 意味 |
|---|---|---|
| 仮数部 | 1.23 | 基本となる値 |
| eまたはE | e | 10のべき乗を使うことを表す |
| 指数部 | -12 | 10を何乗するかを表す |
科学計算や測定値など、桁数の多い値を扱うときに便利です。
%eで指数形式を表示する
printfで%eを使用すると、浮動小数点数を指数形式で表示できます。
printf("%e\n", 1.23e-12);実行結果の例は、次のとおりです。
1.230000e-12%Eを使うと、指数を表す文字が大文字になります。
printf("%E\n", 1.23e-12);実行結果の例は、次のとおりです。
1.230000E-1216進浮動小数点定数
C99以降では、浮動小数点数を16進形式で書くこともできます。
0xA.Fp-10
0XA.FP-10
この形式では、次の記号を使用します。
| 部分 | 役割 |
|---|---|
| 0xまたは0X | 16進形式であることを表す |
| A.F | 16進数で書かれた仮数部 |
| pまたはP | 2のべき乗を使う指数形式 |
| -10 | 2を何乗するかを表す指数部 |
10進の指数形式ではeまたはEを使いますが、16進浮動小数点定数ではpまたはPを使います。
これは、指数部分が10のべき乗ではなく、2のべき乗を表すためです。
16進浮動小数点定数は、初心者向けの一般的なプログラムでは、ほとんど使用しません。
今の段階では、次の点を知っておけば十分です。
- C99以降で使用できる
- 先頭に0xまたは0Xを付ける
- 指数部分にはpまたはPを使う
- 通常は10進の小数点形式や指数形式を使えばよい
浮動小数点定数には誤差が生じることがある
3.14や0.2などの浮動小数点定数は、コンピューターの内部で常に完全に正確に表現できるとは限りません。
コンピューターは数値を有限のビット数で保存します。0.1や0.2のような10進小数は、2進数では有限の桁で表せないため、近い値へ丸めて保存されます。
たとえば、次の計算を考えてみましょう。
double result = 0.1 + 0.2;数学上の結果は0.3ですが、表示桁数を増やすと、次のように見えることがあります。
0.30000000000000004これは、0.1と0.2が内部で近似値として保存されているためです。
浮動小数点定数としてソースコードへ直接書いた場合でも、浮動小数点数が持つ誤差の性質は変わりません。
文字定数は1文字を表す
文字定数は、1文字を表すための値です。
C言語では、文字を単一引用符で囲みます。
'A'
'B'
'x'
'7'文字定数は、char型の変数を初期化するときによく使います。
char grade = 'A';
char symbol = '#';
char digit = '7';'7'は数字の形をした文字です。整数定数の7とは異なります。
| 表記 | 種類 | 意味 |
|---|---|---|
| 7 | 整数定数 | 数値としての7 |
| '7' | 文字定数 | 文字としての7 |
printfで文字を表示するときは、%cを使います。
printf("%c\n", 'A');実行結果は次のようになります。
Aエスケープシーケンスで特殊な文字を表す
改行やタブなど、通常の方法では書きにくい文字は、エスケープシーケンスで表します。
よく使うエスケープシーケンスは、次のとおりです。
| 表記 | 意味 |
|---|---|
| \n | 改行 |
| \t | 水平タブ |
| \ | バックスラッシュ |
| \' | 単一引用符 |
| \" | 二重引用符 |
改行を表す文字定数は、次のように書きます。
'\n'文字列の中でも使用できます。
printf("1行目\n2行目\n");実行結果は次のようになります。
1行目
2行目文字列リテラルは文字の並びを表す
文字列リテラルは、複数の文字が並んだデータを表します。
C言語では、文字列を二重引用符で囲みます。
"ABC"
"computer"
"C language"
"こんにちは"printfで文字列を表示するときは、%sを使用できます。
printf("%s\n", "C言語を学習中です");また、文字列リテラルをprintfの第1引数として直接使用することもできます。
printf("C言語を学習中です\n");1文字の文字列も文字定数とは異なる
'A'と"A"は、どちらも画面へ表示するとAに見えますが、C言語では別のものです。
| 種類 | 表記 | 囲み方 | 内容 | 主な変換指定 |
|---|---|---|---|---|
| 文字定数 | 'A' | 単一引用符 | 1文字 | %c |
| 文字列リテラル | "A" | 二重引用符 | Aと終端を表すヌル文字 | %s |
文字列リテラルの"A"には、文字Aの後ろに文字列の終わりを表すヌル文字\0が含まれています。
概念的には、次の2文字が並んでいます。
A \0そのため、文字定数'A'と文字列リテラル"A"は、用途も内部の扱いも異なります。
図3:文字定数と文字列リテラルの違い

この図から分かること
文字定数'A'は1文字を表し、単一引用符で囲みます。printfでは%cで表示します。
文字列リテラル"A"は文字の並びを表し、二重引用符で囲みます。printfでは%sで表示できます。
"A"には、見えているAだけでなく、文字列の終わりを表すヌル文字\0も含まれています。そのため、'A'と"A"は同じものではありません。
%cと%sを間違えないようにしよう
文字定数を表示するときは%cを使います。
printf("%c\n", 'A');文字列リテラルを表示するときは%sを使います。
printf("%s\n", "A");どちらも実行結果はAですが、渡しているデータの種類が違います。
次の組み合わせを覚えておきましょう。
| 表示するもの | 値の例 | printfの変換指定 |
|---|---|---|
| 整数 | 125 | %d |
| 浮動小数点数 | 2.75 | %f |
| 指数形式の小数 | 4.5e-8 | %e |
| 文字 | 'A' | %c |
| 文字列 | "ABC" | %s |
変換指定と渡す値の種類が合っていないと、正しい結果は保証されません。
定数は初期化で使われる
変数を宣言すると同時に値を設定するとき、初期値として定数を使えます。
int score = 80;
double rate = 3.14;
char grade = 'A';それぞれの右辺には、次の定数が書かれています。
| 初期化 | 使用している定数 |
|---|---|
| int score = 80; | 整数定数80 |
| double rate = 3.14; | 浮動小数点定数3.14 |
| char grade = 'A'; | 文字定数'A' |
初期化では、宣言と同時に定数の値が変数へ保存されます。
定数は代入でも使われる
宣言済みの変数へ値を代入するときにも、定数を使用します。
score = 90;
rate = 3.14159;
grade = 'B';右辺の90、3.14159、'B'が、それぞれ変数へ代入する定数です。
変数へ新しい値を代入すると、以前に保存されていた値が置き換えられます。
int score = 80;
score = 90;最初に整数定数80で初期化し、その後、整数定数90を代入しています。最後にscoreへ保存されている値は90です。
定数の種類を変数で確認するプログラム
次のプログラムでは、整数定数、浮動小数点定数、文字定数を使って変数を初期化します。文字列リテラルはprintfへ直接渡して表示します。
定数で変数を初期化して種類を確認するプログラム
ファイル名:4_4_2.c
// 定数で変数を初期化して種類を確認するプログラム
#include <stdio.h>
int main(void)
{
int decimal_value = 125; // 10進整数定数
int octal_value = 0175; // 8進整数定数
int hex_value = 0x7D; // 16進整数定数
double distance = 2.75; // 小数点形式
double tiny_value = 4.5e-8; // 指数形式
char symbol = 'B'; // 文字定数
printf("10進整数定数の値:%d\n", decimal_value);
printf("8進整数定数の値:%d\n", octal_value);
printf("16進整数定数の値:%d\n", hex_value);
printf("小数点形式の値:%.2f\n", distance);
printf("指数形式の値:%e\n", tiny_value);
printf("文字定数の値:%c\n", symbol);
printf("文字列リテラル:%s\n", "定数の種類を確認しました");
return 0;
}実行結果の例
10進整数定数の値:125
8進整数定数の値:125
16進整数定数の値:125
小数点形式の値:2.75
指数形式の値:4.500000e-08
文字定数の値:B
文字列リテラル:定数の種類を確認しました3種類の整数定数を確認しよう
最初の3つの変数は、異なる表記の整数定数で初期化されています。
int decimal_value = 125;
int octal_value = 0175;
int hex_value = 0x7D;表記は異なりますが、すべて10進数の125を表しています。
そのため、%dで表示した結果は、すべて125です。
10進整数定数の値:125
8進整数定数の値:125
16進整数定数の値:125変数に保存された後も、数値に10進、8進、16進という別々の見た目が保存されるわけではありません。
進数の違いは、ソースコード上で値をどのように表記するかという違いです。
2種類の浮動小数点定数を確認しよう
distanceは、小数点形式の浮動小数点定数2.75で初期化しています。
double distance = 2.75;tiny_valueは、指数形式の浮動小数点定数4.5e-8で初期化しています。
double tiny_value = 4.5e-8;tiny_valueは非常に小さな値なので、%eを使って指数形式で表示しています。
printf("指数形式の値:%e\n", tiny_value);文字定数でchar型の変数を初期化する
symbolは、文字定数'B'で初期化しています。
char symbol = 'B';printfでは%cを使って表示します。
printf("文字定数の値:%c\n", symbol);実行結果にはBと表示されます。
文字列リテラルをprintfへ渡す
最後のprintfには、文字列リテラルを渡しています。
printf("文字列リテラル:%s\n", "定数の種類を確認しました");%sの位置に、文字列リテラルの内容が表示されます。
文字列リテラルは複数の文字から構成されており、その末尾には文字列の終了を示すヌル文字\0があります。
定数を使うときの確認ポイント
整数、小数、文字、文字列をソースコードへ書くときは、次の点を確認しましょう。
- 10進整数へ不要な先頭の0を付けていないか
- 8進整数では0から7までの数字だけを使っているか
- 16進整数の先頭に0xまたは0Xを付けているか
- 小数には小数点形式または指数形式を使っているか
- 文字定数を単一引用符で囲んでいるか
- 文字列リテラルを二重引用符で囲んでいるか
- 文字には%cを使っているか
- 文字列には%sを使っているか
- 浮動小数点数には誤差が生じる可能性を考えているか
よく使う基本形は、次の4つです。
123
3.14
'A'
"ABC"これらを見たときに、整数定数、浮動小数点定数、文字定数、文字列リテラルのどれに当たるか判断できれば、変数の初期化や代入、printfによる表示を正しく組み立てやすくなります。
