C言語における演算式(Expressions)とは、値・変数・演算子などを組み合わせ、計算を行って新しい値を導き出すプログラムの記述単位のことです。
代表的な演算子の種類と、評価時の注意点を解説します。
1. 主な演算子の種類
① 算術演算子(四則演算・余剰)数値の計算に使用します。
int a = 10, b = 3;
int sum = a + b; // 13 (加算)
int diff = a - b; // 7 (減算)
int prod = a * b; // 30 (乗算)
int quot = a / b; // 3 (除算:整数同士の割算は切り捨て)
int mod = a % b; // 1 (剰余:割った余り)
② 関係演算子・等価演算子(比較)2つの値を比較します。
結果は真(1)か偽(0)の値(整数)になります。
int x = 5, y = 10;
printf("%d\n", x < y); // 1 (真)
printf("%d\n", x == y); // 0 (偽:等しいか)
printf("%d\n", x != y); // 1 (真:等しくないか)
③ 論理演算子(条件の組み合わせ)複数の条件を組み合わせる際に使用します。
- && (かつ / AND): 両方が真なら真
- || (または / OR): どちらかが真なら真
- ! (否定 / NOT): 真偽を反転
int age = 20;
if (age >= 18 && age < 65) {
// 18歳以上 かつ 65歳未満
}
④ インクリメント・デクリメント演算子変数の値を1増やしたり減らしたりします。置く位置(前置・後置)で評価のタイミングが変わります。
int a = 5;
int b = ++a; // 前置:aを1増やしてからbに代入 (a=6, b=6)
int x = 5;
int y = x++; // 後置:xをyに代入してから1増やす (x=6, y=5)
⑤ 代入演算子・複合代入演算子値を代入します。演算と代入を一度に行う複合代入もよく使われます。
int count = 10;
count += 5; // count = count + 5 と同じ (15)
count *= 2; // count = count * 2 と同じ (30)
2. 演算子の優先順位と結合性
1つの式の中に複数の演算子がある場合、優先順位に従って評価されます。同じ優先順位の場合は結合性(左から右、または右から左)に従います。
- 優先度の高い演算子: カッコ (), インクリメント ++, ポインタ参照 * など
- 中程度の演算子: 算術演算子 * / % > + - > 比較演算子 < <= > 論理演算子 && > ||
- 優先度の低い演算子: 代入演算子 =, += など
int result = 5 + 3 * 2; // 11 (掛け算が先)
int forced = (5 + 3) * 2; // 16 (カッコ内が先)
3. 演算式で注意すべき挙動・罠整数同士の割り算(整数除算)
int 型同士で割り算を行うと、小数点以下は自動的に切り捨てられます。
int a = 5, b = 2;
double result = a / b; // 2.0 になる (2.5 にはならない)
// 小数点以下も求める場合はキャスト(型変換)が必要
double correct = (double)a / b; // 2.5
短絡評価(ショートサーキット)
論理演算(&& や ||)では、左側の式だけで結果が確定した場合、右側の式は実行されません。
int a = 0;
if (a != 0 && (10 / a > 1)) {
// a != 0 が偽のため、右側の「10 / a」は評価されずゼロ除算エラーを防げる
}
まとめ
一覧
| 演算子の種類 | 記号の例 | 主な役割 |
|---|---|---|
| 算術演算子 | +, -, *, /, % | 数値の四則演算・余りの計算 |
| 関係演算子 | >, <, >=, <=, ==, != | 値の大小や一致の比較 (1または0を返す) |
| 論理演算子 | &&, ||, ! | 複数条件の結合や判定の反転 |
| 単項演算子 | ++, -- | 変数値を1加算/減算 |
| 複合代入 | +=, -=, *=, /= | 計算結果を元の変数に上書き保存 |