広告スペース

第7回 算術演算子

C言語の算術演算子(+, -, *, /, %)と型変換・キャストを図解で解説。

算術演算子

加算
a + b
減算
a - b
乗算
a * b
除算
a / b
剰余
a % b
注意: 整数÷整数は切り捨て7/2=3(3.5ではない)

演算子電卓

int型の結果
double型の結果

型変換とキャスト

C言語では、異なる型を混ぜて計算すると型変換が起こります。自動で変わる場合と、自分で明示する場合があります。

暗黙の型変換(自動)

intdouble を混ぜて計算すると、int が自動的に double に昇格します。これを暗黙の型変換(implicit conversion)と呼びます。
int a = 7;
double b = 2.0;
double result = a / b;  // a が double に自動昇格 → 7.0 / 2.0 = 3.5
int / int
→ int
7 / 2 = 3(切り捨て)
int / double
→ double
7 / 2.0 = 3.5
double / int
→ double
7.0 / 2 = 3.5
ルール: 片方でも double なら結果は double。両方 int のときだけ整数除算(小数切り捨て)になります。

明示的キャスト(手動)

変数の前に (変換先の型) を書くと、一時的に型を変換できます。これをキャスト(cast)と呼びます。
int 同士の計算でも、片方をキャストすれば小数の結果が得られます
int a = 7, b = 2;

// キャストなし → 整数除算
printf("%d\n", a / b);           // 3 (切り捨て)

// キャストあり → 小数の計算
printf("%f\n", (double)a / b);   // 3.500000
キャストの書き方: (型名)式
int → double
int x = 5;
double d = (double)x;  // 5.0
double → int
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 にしかなりません。
キャストは除算の前に行うのがポイントです。

キャスト体験ツール

値を入力して、キャストの有無で結果がどう変わるか確認しましょう。
a / b(int同士)
小数点以下が消える
(double)a / b(キャスト)
正確な結果

キャストが必要な場面まとめ

場面コード例理由
整数の割り算で小数が欲しい(double)a / b片方を double にして小数除算にする
平均値の計算(double)sum / countint 同士の除算を避ける
malloc の戻り値(int *)malloc(...)void* を適切なポインタ型に変換
小数を整数に丸める(int)3.73小数部分を切り捨て
char を数値として扱う(int)'A'65ASCII コードを取得

確認クイズ

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));

A, B, C の出力は?

A: 3, B: 3.333333, C: 3.333333
A: 3, B: 3.333333, C: 3.000000
A: 3.333333, B: 3.333333, C: 3.000000
A: 3, B: 3.000000, C: 3.333333
解説:
A: int / int = int → 10/3 = 3(切り捨て)
B: (double)a / b → 10.0 / 3 = 3.333333(除算の前にキャスト → 小数結果)
C: (double)(a / b) → (double)(3) = 3.000000(先に整数除算が行われてしまう → キャストの位置が重要!)

比較演算子・論理演算子

結果は真(1)または偽(0)
等しい
a == b
等しくない
a != b
より大きい
a > b
AND
a && b
OR
a || b
NOT
!a

演算子を試す

operators.c
出力
「実行」を押してください...
広告スペース

関連する講座

演算子編
第9回 代入・インクリメント
C言語の代入演算子とインクリメント(++)・デクリメント(--)を解説。
演算子編
第10回 比較・論理演算子
C言語の比較演算子(==, !=, <, >)と論理演算子(&&, ||, !)を解説。
演算子編
第8回 確認問題(算術)
C言語の算術演算子の理解度を確認するクイズ。
← 前の講座
第6回 確認問題(scanf)
次の講座 →
第8回 確認問題(算術)

確認クイズ

この講座の理解度をチェックしましょう!

Q1. 7 / 2 の結果は?(int 型同士の演算)

3.5
3
4

int 型同士の除算では小数部分が切り捨てられます。7 / 2 = 3 です。

Q2. 7 % 2 の結果は?

3
1
3.5

% は剰余(余り)演算子です。7 ÷ 2 = 3 余り 1 なので、結果は 1 です。

Q3. (double)5 / 2 の結果は?

2
2.5
2.000000

(double) でキャストすると浮動小数点演算になるため、5.0 / 2 = 2.5 となります。

この記事をシェア
X(Twitter)でシェア Facebookでシェア LINEで送る はてブ

この講座の理解を深めるおすすめ書籍

サイトで動きを理解し、書籍で演習量を補うと効果的です

📘
苦しんで覚えるC言語
MMGames 著
初心者向けの定番入門書。丁寧な解説で基礎を固められます。
Amazonで見る
📗
新・明解C言語 入門編
柴田望洋 著
図解が豊富で、演習問題も充実。大学の教科書としても採用多数。
Amazonで見る
📙
プログラミング言語C 第2版
B.W.カーニハン, D.M.リッチー 著
通称K&R。C言語の原典。基礎を終えた後のステップアップに最適。
Amazonで見る

※ 上記リンクはアフィリエイトリンクです。購入によりサイト運営を支援いただけます。