
C言語基礎|キャスト(型変換)の基本
キャスト(型変換)の基本 ― 思いどおりの計算結果を得るために
これまでの学習で、
整数どうしの演算では小数部が切り捨てられ、
実数が関わる演算では小数部まで計算されることを学びました。
では、「整数で入力された値を使って、正確な実数の計算結果を得たい」
そんなときは、どうすればよいでしょうか。
その答えが キャスト(型変換) です。

小数部が消えてしまう計算の例
まずは、よくある例から見てみましょう。
問題設定
二つの整数値を読み込んで、
1人あたりの距離 を求めて表示するプログラムを考えます。
サンプルプログラム(小数部が失われる例)
プロジェクト名:chap2-9-1 ソースファイル名:chap2-9-1.c
Visual Studio でこのプログラムを実行するには、SDLチェック設定を変更しておく必要があります。
1.プロジェクト名を右クリックして、「プロパティ」をクリックします。
2.「C/C++」→「全般」→「SDLチェック」を「いいえ」に切り替えて「OK」をクリックします。
// 距離を人数で割る(整数演算)
#include <stdio.h>
int main(void)
{
int distance, people;
puts("距離と人数を入力せよ。");
printf("距離(km):"); scanf("%d", &distance);
printf("人数:"); scanf("%d", &people);
printf("1人あたりの距離は%d kmです。\n", distance / people);
return 0;
}実行例
距離(km):85
人数:2
1人あたりの距離は42 kmです。本来は 42.5 km になってほしいところですが、
結果は 42 になっています。
なぜ小数部が切り捨てられたの?
この式に注目しましょう。
distance / people- distance は int
- people は int
つまり、
int / intという演算が行われています。
この場合、C言語では
小数部を切り捨てた整数結果 になります。
実数として計算させる方法①:実数で割る
次は、割る数を実数に変えてみましょう。
printf("1人あたりの距離は%f kmです。\n", distance / 2.0);この場合、
int / doubleとなり、整数が実数に変換された上で演算が行われます。
実数として計算させる方法②:キャストを使う
しかし、私たちは普段
「2.0 で割ろう」ではなく「2 で割ろう」と考えますよね。
そこで使うのが キャスト です。
キャストを使ったサンプルプログラム
プロジェクト名:chap2-9-2 ソースファイル名:chap2-9-2.c
Visual Studio でこのプログラムを実行するには、SDLチェック設定を変更しておく必要があります。
1.プロジェクト名を右クリックして、「プロパティ」をクリックします。
2.「C/C++」→「全般」→「SDLチェック」を「いいえ」に切り替えて「OK」をクリックします。
// キャストを使って実数計算を行う
#include <stdio.h>
int main(void)
{
int distance, people;
puts("距離と人数を入力せよ。");
printf("距離(km):"); scanf("%d", &distance);
printf("人数:"); scanf("%d", &people);
printf("1人あたりの距離は%f kmです。\n",
(double)distance / people);
return 0;
}実行例
距離(km):85
人数:2
1人あたりの距離は42.500000 kmです。今度は、正しく 42.5 が表示されました。
キャストとは何か?
キャスト式の形
(型名) 式これは、
式の値を、指定した型として扱う
という意味を持ちます。
具体例
| キャスト式 | 意味 |
|---|---|
| (int)5.7 | 小数部を切り捨てた 5 を生成 |
| (double)5 | 実数 5.0 を生成 |
| (double)distance | distance を実数として扱う |
キャスト演算子のまとめ
| 項目 | 内容 |
|---|---|
| 名前 | キャスト演算子 |
| 書式 | (型名) 式 |
| 働き | 式の値を指定した型の値として生成 |
キャストを使った演算の流れ
今回の例では、次の順で処理が行われます。
- distance の値を double 型に変換
- double / int の演算が行われる。
- int が double に格上げされる。
- double / double の演算になる。
- 実数の結果が得られる。
まとめ:キャストは「計算の指示」
キャストは、
コンピュータに「この値はこの型として扱ってほしい」と伝える指示 です。
| 状況 | 対応 |
|---|---|
| 整数計算で小数が欲しい | キャストを使う |
| 型の違いを明確にしたい | キャストを使う |
| 意図をコードに残したい | キャストは有効 |
演習問題
演習 2-5
二つの整数値を読み込んで、
前者の値が後者の何%であるかを実数で表示するプログラムを作成せよ。
解答例
プロジェクト名:chap2-9-3 ソースファイル名:chap2-9-3.c
Visual Studio でこのプログラムを実行するには、SDLチェック設定を変更しておく必要があります。
1.プロジェクト名を右クリックして、「プロパティ」をクリックします。
2.「C/C++」→「全般」→「SDLチェック」を「いいえ」に切り替えて「OK」をクリックします。
#include <stdio.h>
int main(void)
{
int a, b;
puts("二つの整数を入力せよ。");
printf("整数a:"); scanf("%d", &a);
printf("整数b:"); scanf("%d", &b);
printf("a の値は b の %f%です。\n",
(double)a / b * 100);
return 0;
}