演算子: 計算のルール

割り算の罠と、超重要な「余り」の使い方。

% (剰余)
割り算の余りを求める演算子。
整数除算
整数同士の割り算は小数点以下が切り捨てられる。
短絡評価
左側だけで結果が確定する場合、右側を評価しない仕組み。

詳細解説

クッキーの分配 (Cookie Sharing)

整数の割り算は「クッキーを割らずに分ける」ルールです。 5枚のクッキーを2人で分けると、1人2枚(5 / 2 = 2)です。2.5枚にはなりません。 余った1枚(5 % 2 = 1)を知るには「%(剰余)」を使います。この「余り」こそが、偶数判定やサイクリックな処理で大活躍するプログラマの武器です。

整数同士の割り算の罠

初心者が最もハマる罠の一つが「割り算」です。数学では 5 ÷ 2 = 2.5 ですが、C言語の整数同士の計算では 5 / 2 = 2 となります。小数点以下は 切り捨てられます。

2.5という結果が欲しい場合は、5.0 / 2.0 のように、どちらかを実数(浮動小数点数)にする必要があります。

プログラマの友「%(余り)」

% 演算子は、割り算の余りを求めます。これは単なる計算だけでなく、アルゴリズムの基礎になります。

  • n % 2 == 0 → 偶数判定
  • n % 10 → 1の位を取り出す
  • ループ処理で特定の間隔で処理を実行する

演算子一覧

Common Pitfalls
// 四則演算
int a = 10, b = 3;
// 1. 割り算の罠(整数同士=整数)
printf("%d\n", a / b); // 3 (3.333...ではない!)
printf("%f\n", (double)a / b); // 3.333...
// 2. 余り(剰余)
// 偶数判定やループ処理で多用する超重要演算子
printf("%d\n", a % b); // 1 (10 ÷ 3 = 3 余り 1)

実践テクニック

インクリメントは単独で使う

<code>i++</code> と <code>++i</code> の違いは、式の中で使うと発生します。バグの元なので、単独の行として書くのが安全で確実なスタイルです。

Safe Increment
// インクリメント(1増やす)
int i = 0;
// 推奨: 単独で使う
i++;
++i;
// 非推奨: 式の中で使う(副作用の温床)
// a = i++ + ++i; // 動作は未定義!絶対ダメ。

短絡評価を活用する

<code>&&</code> 演算子の「左がダメなら右は見ない」という性質を利用して、安全なコード、いわゆる「ガード節」のような書き方ができます。

Short-circuit Logic
// 論理演算と短絡評価
// A && B : Aが偽なら、Bは実行されない!
if (ptr != NULL && *ptr == 10) {
// ptrがNULLなら右側は評価されないので安全
// これを逆にするとクラッシュする
printf("Safe!\n");
}

演習課題

課題1: うるう年判定
西暦 year が「4で割り切れる かつ 100で割り切れない(または400で割り切れる)」ときに真となる条件式を書いてください。
解答例を見る
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
printf("Leap year!\n");
}
課題2: 時間変換
秒数(例: 3661秒)を入力として、「1時間1分1秒」のように変換する計算式を考えてください。ヒント: / と % を使います。

合格ライン

5 / 2 が 2 になる理由を説明できる
% 演算子を使って偶数判定ができる
インクリメントを単独行で書いている