トラック5・📦変数・型・演算子

算術演算子と優先順位

読む目安 約11分・ゴール:5つの算術演算子と優先順位を理解し、複合代入・インクリメントを正しく使える

アプリでこのトピックを学ぶ(無料・登録不要)

このトピックの要点

計算の記号を演算子と呼びます。Cの算術演算子は5つだけです。

・+ 足す ・- 引く ・* 掛ける ・/ 割る ・% 余り

掛け算は × ではなく *、割り算は ÷ ではなく / を使います。

優先順位——どれが先に計算されるか

#include <stdio.h>

int main(void) {
    printf("%d\n", 2 + 3 * 4);
    printf("%d\n", (2 + 3) * 4);
    printf("%d\n", 10 - 4 - 3);
    printf("%d\n", 17 % 5 + 1);
    return 0;
}

出力は 14、20、3、3 です。ルールは算数と同じで、* / % が + - より先。同じ強さなら左から右へ。10 - 4 - 3 は (10 - 4) - 3 と解釈されます。

迷ったら括弧を書きます。括弧は読む人へのコメントでもあります。

複合代入——同じ変数を更新する

#include <stdio.h>

int main(void) {
    int tokuten = 100;

    tokuten += 50;   // tokuten = tokuten + 50 と同じ
    tokuten -= 20;
    tokuten *= 2;
    tokuten /= 3;

    printf("%d\n", tokuten);
    return 0;
}

150 → 130 → 260 → 86(整数の割り算なので切り捨て)。出力は 86 です。+= は「自分自身を使って更新する」ときの定型で、変数名を2回書かずに済みます。

インクリメントとデクリメント

#include <stdio.h>

int main(void) {
    int n = 5;

    n++;   // 1増やす
    ++n;   // これも1増やす
    n--;   // 1減らす

    printf("%d\n", n);
    return 0;
}

出力は 6。単独の文として使うぶんには n++ と ++n に違いはありません。差が出るのは式の中で使ったとき(int a = n++; と int a = ++n;)ですが、そもそも式の中に混ぜないのが安全です。ループでの使い方はトラック6で扱います。

罠・注意

% は整数専用。 7.5 % 2 はコンパイルエラーです。小数の余りが必要なら math.h の fmod を使います。

0で割ってはいけない。 整数の x / 0 はプログラムが異常終了します。% も同じです。割る前に0でないか確かめます。

単項マイナスは強い。 -3 * 2 は (-3) * 2 と解釈されます。

優先順位に頼りすぎない。 正しく書けていても、読む人が3秒迷うなら括弧を足します。3秒は3か月後の自分の時間でもあります。

ビット* と / が先、あとは左から右。これだけ覚えたら、残りは括弧で守ればいいよ。

まとめ

算術演算子は + - * / % の5つ。* / % が優先で、同じ強さなら左から右。+= などの複合代入と ++ -- で更新を短く書けます。% は整数のみ、0除算は事故。迷ったら括弧です。

アプリでこのトピックを学ぶ(無料・登録不要)

確認問題

確認問題 1

7 ____ 2 の計算結果が 1 になる演算子はどれですか(どちらも int とします)。

  1. /
  2. %
  3. *
  4. -
答えを見る

正解:B(%)

% は割り算の余りを返す演算子で、7 ÷ 2 は商3・余り1なので結果は 1 です。7 / 2 は切り捨てで 3、7 * 2 は 14、7 - 2 は 5。% は偶数判定(n % 2 == 0)や桁の取り出し(n % 10)でよく使います。

確認問題 2

このプログラムの出力はどれですか。

#include <stdio.h>

int main(void) {
    int a = 2 + 3 * 4;
    int b = (2 + 3) * 4;
    int c = 10 - 4 - 3;
    printf("%d %d %d\n", a, b, c);
    return 0;
}
  1. 20 20 3
  2. 14 20 3
  3. 14 20 9
  4. 20 14 3
答えを見る

正解:B(14 20 3)

* は + より優先なので 2 + 3 * 4 は 2 + 12 = 14。括弧を付けた (2 + 3) * 4 は 20。10 - 4 - 3 は同じ優先順位なので左から順に (10 - 4) - 3 = 3 になります(右から計算すると 9 になってしまいます)。迷ったら括弧を書くのが安全です。

「変数・型・演算子」の目次

  1. 変数とは名前付きの箱
  2. int型と整数の世界
  3. 浮動小数点数 float / double
  4. char型と文字コード
  5. bool型と真偽——C23標準の書き方
  6. 定数——const と constexpr
  7. 算術演算子と優先順位
  8. 整数の割り算と剰余の罠
  9. 型変換——暗黙と明示
  10. 2進数・16進数リテラル(0b / 0x / 桁区切り')
  11. sizeofとメモリ上のサイズ
  12. オーバーフローという事件

もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。

完全版の販売ページは準備中です。

ほかのトラック

📚 姉妹教材:手を動かして覚える Linux 教材 — Linuxとインフラの仕組みを地図で学ぶ

Web版