月ノ書

【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 になりそうに見えます
しかし計算が行われる時点では

つまり 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 型として扱っています
結果として

という流れになります

暗黙型変換とは

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

この場合

計算の前に 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言語で計算結果を正しく得るために欠かせない知識です

型を意識できるようになると、C言語の挙動が一気に分かりやすくなります

学習進捗

0
Would love your thoughts, please comment.x