06 データ型まとめ・定数とは

「プログラム上のすべてのデータには、必ず何らかのデータ型がある。」
ここまで整数型を学んだ。この章では残りのデータ型をまとめ、「定数(リテラル)」という概念を学ぶ。


06-1 C言語の基本データ型

型名意味サイズ(目安)使用例
int整数4 バイト10, -5, 0
double実数(倍精度)8 バイト3.14, -2.7
float実数(単精度)4 バイト3.14f, -0.5f
char文字(1文字)1 バイト'A', '7'
文字列(char[]文字の並び文字数+1 バイト"Hello", "abc"

06-2 定数(リテラル)とは

定数とは、プログラム中に直接書かれた値のことで、リテラルとも呼ぶ。
変数は後から値を変えられるが、定数はプログラム中で固定された値である。

int x = 10;   /* 10 が定数(整数リテラル)、x が変数 */

以下はすべて定数の例:

定数説明
100int整数リテラル
3.14double実数リテラル(何もつけなければ double)
3.14ffloat末尾に f をつけると float 型
'A'char文字リテラル(シングルクォート)
"Hello"char[]文字列リテラル(ダブルクォート)
0xFFint16進数リテラル(0x を前置)
0755int8進数リテラル(0 を前置)
⚠ 整数の先頭に 0 をつけると 8進数として解釈される。
010 は 10 進数の 10 ではなく、8進数の 10(= 10進数の 8)になる。意図しない値になりやすいので注意。

06-3 数値の表記方法

表記形式意味例と10進数での値
1010進数(通常)int x = 10; → 10
0xFF16進数int x = 0xFF; → 255
07558進数int x = 0755; → 493
3.14実数(double)double d = 3.14;
3.14f実数(float)float f = 3.14f;

06-4 数値と文字は別物

C言語では 7(数値)と '7'(文字)はまったく別のものである。

表現内容実際の値
7数値の 7int7
'7'文字の「7」char55(ASCIIコード)
'A'文字の「A」char65(ASCIIコード)

char 型は内部的には整数(ASCIIコード)として保存されている。
そのため 'A' + 165 + 1 = 66 → 文字 'B' になる。

'A'(シングルクォート)は1文字。"A"(ダブルクォート)は文字列。この違いは重要。

ASCII コード表(抜粋)

文字10進16進文字10進16進
'A'650x41'a'970x61
'B'660x42'b'980x62
'0'480x30'1'490x31
'!'330x21'?'630x3F

全体の表は Wikipedia(ASCIIコード一覧) で確認できる。


06-5 実行例:各型の変数と定数

📋 この章で追加で使う書式指定子(詳細は07で学ぶ)

%d ← int(整数)を表示
%f ← double / float(実数)を表示。%.2f は小数点以下2桁
%c ← char(1文字)を表示
06_01_datatypes.c
#include <stdio.h>

int main(void)
{
    int    score = 90;
    double rate  = 0.85;
    char   grade = 'A';

    printf("スコアは %d 点です\n", score);
    printf("成功率は %.2f です\n",  rate);
    printf("評価は %c です\n",      grade);

    return 0;
}

実行結果:

スコアは 90 点です
成功率は 0.85 です
評価は A です

06-6 理解度チェック

Q1. 次のコードで 5 の種類として正しいものはどれか。

int a = 5;

ア. 文字型定数
イ. 整数型定数
ウ. 実数型定数
エ. 整数型変数

解説を表示

正解:イ

5 はプログラム中に直接書かれた整数リテラル(定数)。a が変数、5 が定数。

Q2. 次のコードで '!' の型はどれか。

char mark = '!';

ア. 文字型定数
イ. 整数型変数
ウ. 実数型定数
エ. 文字列定数

解説を表示

正解:ア

シングルクォートで囲まれた1文字は char 型の定数。ダブルクォートの "!" は文字列定数になる。

Q3. 次のコードで rate の種類はどれか。

float rate = 0.05f;

ア. float 型定数
イ. float 型変数
ウ. double 型変数
エ. 文字型定数

解説を表示

正解:イ

ratefloat 型の変数。右辺の 0.05f は float 型の定数。問いは rate 自体の種類を問うている。

Q4. float 型の定数として正しいものはどれか。

ア. 3.14
イ. 3.14f
ウ. "3.14"
エ. 3

解説を表示

正解:イ

末尾に f をつけると float 型の定数になる。何もつけない 3.14 は double 型。

Q5. 文字型定数に当たるものはどれか。

ア. 'A'
イ. "A"
ウ. 65
エ. char c = 'B';

解説を表示

正解:ア

シングルクォートで囲んだ1文字が文字定数。"A" はダブルクォートなので文字列定数。65 は整数定数。char c = 'B'; は変数宣言。

Q6. 次のコードで画面に表示される文字はどれか。

#include <stdio.h>

int main(void)
{
    char c = 'A' + 1;
    printf("%c", c);
    return 0;
}

ア. B
イ. A1
ウ. 66
エ. エラー

解説を表示

正解:ア

'A' は ASCII コードで 65。65 + 1 = 66'B' に対応する。%c で文字として表示されるので B が出力される。

Q7. 8進数リテラルとして正しい表現はどれか。

ア. 0x20
イ. 0b100
ウ. 0755
エ. 8.0

解説を表示

正解:ウ

先頭に 0 をつけると 8進数リテラルになる。0x は 16進数。0b はこの授業で扱う規格(C89〜C99)では使えない。