【C言語】型変換(キャスト)完全解説|整数割り算でハマらないための基礎知識
今回の記事でわかること
- 型変換(キャスト)の基本的な考え方が分かる
- 整数計算で小数が消える理由が理解できる
- 明示的キャストと暗黙型変換の違いが分かる
- 型変換で起きやすいバグのポイントが分かる
型変換とは
変数の型を一時的または明示的に変えること を型変換(キャスト)と呼びます
C言語では型によって計算方法が変わるため、型変換を意識しないと「思っていた結果」と違う値が出ることがあります
特に、整数と小数を混ぜた計算は初心者が最初につまずきやすいポイントです
型変換しないとどうなるか
まずは、よくある例から見てみます
#include <stdio.h>
int main(void) {
int a = 5;
int b = 2;
double result = a / b;
printf("result = %f\n", result);
return 0;
}出力結果
result = 2.000000一見すると double 型の変数に代入しているので 2.5 になりそうに見えます
しかし計算が行われる時点では
- a は int
- b は int
つまり int ÷ int の計算 になっています
C言語では、整数同士の割り算は整数結果になり、小数部分は切り捨てられます
明示的な型変換(キャスト)
小数まで含めた結果が欲しい場合は、自分で型変換を指定する必要があります
#include <stdio.h>
int main(void) {
int a = 5;
int b = 2;
double result = (double)a / b;
printf("result = %f\n", result);
return 0;
}出力結果
result = 2.500000ここで行っているのが 明示的な型変換(キャスト) です
(double)aこの部分で a を一時的に double 型として扱っています
結果として
- double ÷ int
- int が double に変換される
- 小数計算になる
という流れになります
暗黙型変換とは
C言語では、場合によって 自動で型変換が行われる ことがあります
これを暗黙型変換(implicit cast)と呼びます
#include <stdio.h>
int main(void) {
int a = 3;
double b = 2.0;
double result = a + b;
printf("result = %f\n", result);
return 0;
}出力結果
result = 5.000000この場合
- a は int
- b は double
計算の前に int の a が double に自動変換 され
double + doubleとして計算されます
暗黙型変換は便利ですが、意図しない型変換が起きるとバグの原因になることがあります
型変換で注意すべきポイント
小さい型への変換は危険
int x = 300;
char c = (char)x;このような変換では値が収まりきらず、予期しない値になることがあります
浮動小数点の精度に注意
int a = 1;
int b = 3;
double r = (double)a / b;結果は 0.333333… になりますが、浮動小数点は誤差を完全には表せません
金額計算などでは特に注意が必要です
ポインタのキャストは慎重に
C言語ではポインタ同士のキャストも可能ですが
- 型を間違える
- サイズが違う
これが当てはまると 即クラッシュする危険 があります
初心者のうちは、理由が分からないポインタキャストは避けるのが安全です
型変換の考え方のコツ
- 計算が行われる「型」を意識する
- 結果の型ではなく「途中の型」が重要
- 曖昧なときは明示的にキャストする
この意識を持つだけでバグの発生率が大きく下がります
まとめ
型変換(キャスト)はC言語で計算結果を正しく得るために欠かせない知識です
- int 同士の計算は整数結果になる
- 小数が欲しい場合は明示的にキャストする
- 暗黙型変換は便利だが油断すると危険
- 特に整数割り算は要注意
型を意識できるようになると、C言語の挙動が一気に分かりやすくなります