
C言語基礎|型と演算の関係
型と演算の関係 ― 計算結果は型で決まる
ここまでの学習で、次のことが分かってきましたね。
- 整数どうしの計算では、小数部が切り捨てられる。
- 実数どうしの計算では、小数部も含めた結果が得られる。
実は、どんな計算結果になるかは、演算に使われる「型」によって決まる のです。
この節では、型と演算がどのように結びついているのかを、具体例で整理していきます。

オペランドの型が同じ場合の演算
まずは基本から確認しましょう。
同じ型どうしの演算
| 演算 | 結果の型 | 特徴 |
|---|---|---|
| int / int | int | 小数部は切り捨て |
| double / double | double | 実数として計算 |
重要ポイント
オペランドの型が同一であれば、演算結果も同じ型になる
これは C言語のとても重要なルールです。
型が異なる場合はどうなる?
次に、オペランドの型が異なる場合を考えてみましょう。
- int / double
- double / int
このような場合、C言語では 暗黙の型変換 が行われます。
暗黙の型変換とは?
演算を行う前に、
- 小さい(表現力の低い)型
- より大きく、表現力の高い型
へと、自動的に変換される仕組みです。
重要ルール(覚えておきましょう)
演算の対象となるオペランドの型が異なるときは、
より大きくて表現力の高い型に揃えられてから演算が行われる
※ ここで言う「大きい」とは、
メモリサイズではなく「小数部を扱えるかどうか」という意味です。
型と演算を確認するサンプルプログラム
ここでは元の例を変更し、
距離と人数を使った計算 で確認してみましょう。
サンプルプログラム
プロジェクト名:chap2-8-1 ソースファイル名:chap2-8-1.c
// 型と演算の関係を確認するプログラム
#include <stdio.h>
int main(void)
{
int people;
double distance;
people = 3;
distance = 10.0;
printf("distance / people = %f\n", distance / people);
printf("people / distance = %f\n", people / distance);
printf("people / 2 = %d\n", people / 2);
printf("people / 2.0 = %f\n", people / 2.0);
return 0;
}実行結果例
distance / people = 3.333333
people / distance = 0.300000
people / 2 = 1
people / 2.0 = 1.500000実行結果を読み解こう
double と int が混ざった演算
| 式 | 解説 |
|---|---|
| distance / people | people が double に変換される。 |
| people / distance | people が double に変換される。 |
| 結果 | double 型 |
どちらも double 型どうしの演算 になるため、小数部が残ります。
int どうしの演算
| 式 | 結果 | 理由 |
|---|---|---|
| people / 2 | 1 | int / int のため切り捨て |
| people / 2.0 | 1.5 | double に格上げされる。 |
ここがとても重要なポイントです。
演算結果をどこに代入するかも重要
演算の結果が double 型でも、
代入先が int 型なら小数部は切り捨てられます。
| 演算結果 | 代入先 | 格納される値 |
|---|---|---|
| 7.5 | int | 7 |
| 7.5 | double | 7.5 |
演算と代入は、別々のルール で動いている点に注意しましょう。
まとめ:型と演算を意識しよう
| 観点 | ポイント |
|---|---|
| 同じ型どうし | 結果も同じ型 |
| 異なる型 | 大きい型に揃えられる |
| int の演算 | 小数部は切り捨て |
| 代入時 | 代入先の型が優先 |
「計算式は合っているのに結果がおかしい」と感じたときは、
どの型で演算され、どの型に代入されているか
を確認するクセをつけると安心です 😊
演習問題
演習 2-3
読み込んだ実数値をそのまま表示するプログラムを作成せよ。
解答例
プロジェクト名:chap2-8-2 ソースファイル名:chap2-8-2.c
Visual Studio でこのプログラムを実行するには、SDLチェック設定を変更しておく必要があります。
1.プロジェクト名を右クリックして、「プロパティ」をクリックします。
2.「C/C++」→「全般」→「SDLチェック」を「いいえ」に切り替えて「OK」をクリックします。
#include <stdio.h>
int main(void)
{
double x;
printf("実数を入力せよ:");
scanf("%lf", &x);
printf("あなたは %f と入力しましたね。\n", x);
return 0;
}演習 2-4
int 型と double 型を混在させた演算を行い、
演算結果と代入結果の違いを確認せよ。
解答例
プロジェクト名:chap2-8-3 ソースファイル名:chap2-8-3.c
int a = 5;
double b = 2.0;
printf("%f\n", a / b);
printf("%d\n", a / 2);