演算子の優先順位 | Programming Place Plus C言語編

トップページC言語編

演算子の優先順位 🔗

C言語に存在する演算子の優先度が、どのように定義されているか一覧できるようにしました。

C++ の演算子一覧がこちらのページにあります。


優先度 演算子 機能 結合の向き 解説章
1 () 関数呼び出し 左から右 第9章
[] 配列の要素 第25章
-> ポインタからの構造体メンバアクセス 第31章
. 構造体メンバアクセス 第26章
++ 後置インクリメント 第12章
「優先度」の列の数値が小さいものほど、演算が優先されます。演算とは、演算子ごとに異なる処理のことを指しており、/ なら除算、<< ならシフト演算といった意味です。オペランドの式から値を得ることは評価といい、(a + b) / f() であれば、a + b を計算して値を作ったり、f を呼び出して戻り値を得たりすることを指します。演算子の優先度が高いからといって、その演算子のオペランドが先に評価されるということではありません。評価の順序は、&& や ||(短絡評価)、カンマ演算子(必ず左から)、?:(第1オペランドを評価してから、第2または第3オペランドが評価される)といった一部の例外を除いて、未規定です[1]
「結合の向き」とは、優先度が同じ演算子が1つの式の中に複数あらわれるとき、どの演算子とどのオペランドが結びついているのかを決めるルールです。たとえば、a * b / c では、*/ は同じ優先度で、左から右の結合なので、(a * b) / c であるとみなされます。同様に、a = b = c では、= は右から左の結合なので、a = (b = c) であるとみなされます。

なお、もっとも高い優先度のところにあるので勘違いしやすいですが、( ) は関数呼び出しのものであって、a = (10 + 5) * 2; のように使われる ( ) とは異なります。これは括弧式というもので、演算子ではありません。括弧式の効果は、グループ化する範囲を示すことです。
参考リンク


更新履歴 🔗

    • 優先度と評価の順番について補足
    • 評価の順序と、結合の話題が混乱していたを整理

 _Alignof演算子を追加。

 「サイズ」という表記について表現を統一。 型のサイズ(バイト数)を表しているところは「大きさ」、要素数を表しているところは「要素数」。

 新規作成。



C言語編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る