C言語の算術演算子(+, -, *, /, %)と型変換・キャストを図解で解説。
7/2=3(3.5ではない)int と double を混ぜて計算すると、int が自動的に double に昇格します。これを暗黙の型変換(implicit conversion)と呼びます。int a = 7; double b = 2.0; double result = a / b; // a が double に自動昇格 → 7.0 / 2.0 = 3.5
(変換先の型) を書くと、一時的に型を変換できます。これをキャスト(cast)と呼びます。int a = 7, b = 2; // キャストなし → 整数除算 printf("%d\n", a / b); // 3 (切り捨て) // キャストあり → 小数の計算 printf("%f\n", (double)a / b); // 3.500000
(型名)式int x = 5; double d = (double)x; // 5.0
double d = 3.7; int n = (int)d; // 3 (小数切り捨て)
int sum = 17, n = 3; double avg = (double)sum / n; // 5.666...
(double)(sum / n) と書くと、先に sum / n が整数除算で 5 になり、それを double にしても 5.0 にしかなりません。| 場面 | コード例 | 理由 |
|---|---|---|
| 整数の割り算で小数が欲しい | (double)a / b | 片方を double にして小数除算にする |
| 平均値の計算 | (double)sum / count | int 同士の除算を避ける |
| malloc の戻り値 | (int *)malloc(...) | void* を適切なポインタ型に変換 |
| 小数を整数に丸める | (int)3.7 → 3 | 小数部分を切り捨て |
| char を数値として扱う | (int)'A' → 65 | ASCII コードを取得 |
int a = 10, b = 3; printf("A: %d\n", a / b); printf("B: %f\n", (double)a / b); printf("C: %f\n", (double)(a / b));
int / int = int → 10/3 = 3(切り捨て)(double)a / b → 10.0 / 3 = 3.333333(除算の前にキャスト → 小数結果)(double)(a / b) → (double)(3) = 3.000000(先に整数除算が行われてしまう → キャストの位置が重要!)
この講座の理解度をチェックしましょう!
int 型同士の除算では小数部分が切り捨てられます。7 / 2 = 3 です。
% は剰余(余り)演算子です。7 ÷ 2 = 3 余り 1 なので、結果は 1 です。
(double) でキャストすると浮動小数点演算になるため、5.0 / 2 = 2.5 となります。