
C言語入門|演算時の型変換を理解する:異なる型同士の計算はどのように処理されるか
「代入のときに型変換が起こるのは分かったけど、
計算の途中ではどうなってるの?」🤔
ここまで学んできた人なら、きっとこんな疑問が浮かびますよね。
実はC言語では、演算の途中でも自動的に型変換が行われています。
このしくみを知らないまま計算式を書くと、
「思った結果と違う!」
「なぜ小数が消えた?」
といったトラブルにハマりがちです😅
ここでは、演算時の自動型変換がどのように働いているのかを、
じっくり・やさしく整理していきましょう。

演算でも「型はそろえてから」が原則
まず大前提として、C言語ではこう考えてください🙂
👉 演算は、左右の型をそろえてから行われる
これは代入時と同じ考え方です。
算術演算子(+、−、*、/ など)を使う場合でも、
左右のオペランドは同じ型で計算されるのが原則です。
では、同じ型同士で演算するとどうなるのか、
割り算を例に見てみましょう。
| 式 | 計算結果 |
|---|---|
| 5 / 2(int 同士) | 2(int) |
| 5.0 / 2.0(double 同士) | 2.5(double) |
この結果から分かる大事なポイントはこれです👇
👉 計算結果の型は、使われたオペランドの型になる
int 型同士なら int 型の結果、
double 型同士なら double 型の結果になります。
整数同士の割り算が怖い理由😨
ここで一度、よくある落とし穴に触れておきましょう。
int result = 5 / 2;この結果は 2 です。
「2.5 じゃないの?」と思った人は要注意⚠️
5 も 2 も int 型なので、
整数の世界で計算が完結してしまうからです。
小数点以下は、
「最初から存在しなかったこと」にされます😱
異なる型同士で演算するとどうなる?
では、ここからが本題です✨
異なる型同士で演算を行った場合、C言語はどう動くのでしょうか?
答えはとてもシンプルです。
👉 意味的に大きな型に統一してから計算する
以前に学んだ、型の大小関係を思い出してください🙂
char → short → int → long → float → double
(小) (大)この並びのうち、
より大きい型に合わせて変換されるのが演算時のルールです。
異なる型の割り算の流れを見てみよう
次の式を例に、処理の流れを追ってみましょう。
5.0 / 2この式では、
- 5.0 は double 型
- 2 は int 型
ですね。
C言語は、次のように処理します👇
1️⃣ int 型の 2 を double 型の 2.0 に変換
2️⃣ double 同士で割り算を実行
3️⃣ 結果は double 型になる
つまり、内部ではこうなっています。
5.0 / 2.0 → 2.5「先に型をそろえてから計算」
この姿勢は、C言語の一貫したルールなんですね😊
異なる型同士の演算例(サンプルプログラム)
ここで、異なる型同士の演算を含むプログラムを、
少し内容を変えて見てみましょう。
プロジェクト名:3-8-1 ソースファイル名: sample3-8-1.c
#include <stdio.h>
int main(void)
{
double price = 9.0 / 4; // 4(int)→ 4.0(double)に変換
long total = 6 + 3L; // 6(int)→ 6L(long)に変換
printf("%f\n", price);
printf("%ld\n", total);
return 0;
}実行結果は次のとおりです。
2.250000
9ここでも、演算の前に型がそろえられていることが分かりますね🙂
printf も型に注意しよう!
ちなみに、ここで使っている printf も
型に応じた書式指定子を使う必要があります。
| 型 | 書式指定子 |
|---|---|
| int | %d |
| long | %ld |
| float / double | %f |
今回の例では、
long 型を表示するために %ld を使っています。
型変換だけでなく、
表示のしかたまで含めて型を意識する
これがC言語上達の近道です✨
演算時の型変換をまとめると😊
ここまでの内容を、頭の中で整理してみましょう。
- 演算は、左右の型をそろえてから行われる。
- 同じ型同士なら、その型のまま計算される。
- 異なる型同士なら、意味的に大きな型に変換される。
- 計算結果の型は、統一されたあとの型になる。
つまりC言語は、
👉 勝手に計算するのではなく、必ずルールに従って変換してから計算する
という、とても律儀な言語なんです😄
型を意識できると、バグが減る✨
演算時の型変換を理解すると、
- 整数の割り算で小数が消える理由
- なぜ double を混ぜると結果が変わるのか
- キャストが必要な場面と不要な場面
こうした疑問が一気にスッキリします😊
「なんとなく動いてる」から
「理由が分かって動いている」へ。
これが、C言語を一段レベルアップして使えるようになる瞬間です👍
