C言語学習ポータル(無料版) 学習コンテンツ 変数・型・演算子 算術演算子と優先順位

📦 変数・型・演算子

算術演算子と優先順位

無料公開版に収録・読む目安 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除算は事故。迷ったら括弧です。

要点まとめ

アプリで演習問題まで解く(無料・登録不要)

この項目に出てくる用語

演算子えんざんし

+や-、==など、値どうしを計算したり比較したりするための記号のこと。演算子ごとに計算される優先順位があらかじめ決まっている。+ - * / のような算術演算子のほか、比較や論理の演算子も含まれる。

int型いんとがた

整数を扱うための基本的な型のこと。小数点を持たない数値を格納する、C言語でもっとも使う機会の多い型のひとつにあたる。環境にもよるが、多くの場合4バイトの大きさで値を保持している。

変数へんすう

値を入れておくための名前付きの箱のこと。名前をつけることで中身を自由に出し入れできる、プログラムの記憶場所にあたる。変数名は自由に付けられるが、意味の分かる名前にすると読みやすいコードになる。

同じトラックのほかの項目

変数とは名前付きの箱宣言・代入・初期化を区別し、型のついた変数を正しく作って使える int型と整数の世界intの範囲と限界値の調べ方を知り、long long・unsignedの使いどころが分かる 浮動小数点数 float / doubledoubleを既定として使い分け、小数に必ず誤差があることと比較の作法を理解する char型と文字コードcharが1バイトの小さな整数であることを理解し、文字と数値を相互に変換できる bool型と真偽——C23標準の書き方C23のbool/true/falseをそのまま使い、Cにおける真偽(0が偽・0以外が真)を説明できる 定数——const と constexprconstとconstexpr(C23)を使い分け、変わらない値を宣言時に固定できる 整数の割り算と剰余の罠整数どうしの割り算が切り捨てになる理由を理解し、平均計算などで正しく対処できる 型変換——暗黙と明示暗黙の型変換が起きる方向を知り、キャストで意図を明示できる 2進数・16進数リテラル(0b / 0x / 桁区切り')0b・0x・8進の書き方の違いを理解し、C23の桁区切りで読みやすく数値を書ける sizeofとメモリ上のサイズsizeofで型と変数のバイト数を測り、型ごとに箱の大きさが違うことを実感できる オーバーフローという事件オーバーフローが起きる仕組みと危険性を理解し、桁の見積もりと予防策を実行できる
‹ 定数——const と constexpr 整数の割り算と剰余の罠 ›

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

完全版(BOOTH)を見る

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

Web版 / BOOTH