本文へスキップ
BecomeCoder

C言語コース · 第2章 演算子 · レッスン7

型変換とキャスト

ブラウザで完結

導入

intdouble が混ざった計算では、型の扱いに注意が必要です。自然に変換される「暗黙の変換」と、自分の意図で変換する「キャスト」の両方を覚えましょう。

説明

レッスン5で見たとおり、int どうしの割り算は切り捨てられます。たとえば 5 / 22.5 ではなく 2 です。これは C言語につまずきやすい代表的な落とし穴です。

#include <stdio.h>

int main(void) {
    printf("%d\n", 5 / 2);   // 2(小数部分が切り捨てられる)
    return 0;
}

小数で計算したいときは、どちらかを double にします。intdouble が混ざった式では、C言語が自動で intdouble に変換してくれます(暗黙の変換)。

#include <stdio.h>

int main(void) {
    double x = 7.0, y = 2.0;
    printf("%f\n", x / y);   // 3.500000
    return 0;
}

自分で明示的に型を変換したいときは、値の前に (型名) を付けます。これをキャストと呼びます。

#include <stdio.h>

int main(void) {
    int a = 7, b = 2;
    printf("%d\n", a / b);            // 3(整数どうしの割り算)
    printf("%f\n", (double)a / b);    // 3.500000(a を double に変換してから割る)
    return 0;
}

(double)a は「adouble に変換した値」を作ります。変換してから割り算しているので、片方が double になり、結果も小数のまま計算されます。

逆に、小数を整数にキャストすると、小数部分が切り捨てられます。

#include <stdio.h>

int main(void) {
    double price = 3.9;
    int rounded = (int)price;   // 3(切り捨て。四捨五入ではない)
    printf("%d\n", rounded);

    // 平均点を小数で出す例
    int total = 250, count = 3;
    printf("%f\n", (double)total / count);  // 83.333333
    return 0;
}

型変換を意識すると、「なぜか小数が出ない」「割り算の結果が思った値と違う」といったC言語特有のつまずきを避けられます。

やってみよう

(double) を付けたり外したりして、結果が 33.500000 で変わることを確かめましょう。(int) で小数が切り捨てられることも試してください。

演習

int total = 17, count = 4; の平均を、(double) を使って小数で表示してください(結果は 4.250000)。

ヒント1を見る

printf("%f\n", (double)total / count);

実際に動かしてみよう

下のエディタにCを書いて「実行」を押すと、ブラウザ内のインタプリタで出力が表示されます。本文の例をそのまま試したり、書き換えたりしてみましょう(scanf を使う回は「標準入力」欄に値を入れてから実行します)。

C/C++ — ブラウザ内で実行

ブラウザ内でC/C++を動かす学習用インタプリタ(JSCPP)を読み込みます(入門向けのサブセットです)。
スクロールして表示された時点でも自動で読み込まれます。