C言語の演算子の優先順位と結合性とは?基本をわかりやすく解説
Cプログラミングにおいて、式を正しく評価するためには「演算子の優先順位」と「結合性」の理解が不可欠です。まずは、この2つの基本的な概念について詳しく見ていきましょう。
演算子の優先順位とは
演算子の優先順位とは、1つの式の中に複数の演算子が含まれている場合に、どの演算子から先に評価するかを決めるルールです。C言語ではすべての演算子に優先度が割り当てられており、優先順位の高い演算子ほど先に評価され、優先順位の低い演算子は後から評価されます。
例えば、5 + 3 * 2 という式では、乗算(*)の方が加算(+)よりも優先順位が高いため、まず 3 * 2 = 6 が計算され、その結果に対して 5 + 6 = 11 という評価が行われます。
演算子の結合性とは
演算子の結合性とは、同じ優先順位を持つ演算子が式の中に複数存在する場合に、評価の順序を決めるためのルールです。「左から右へ」評価されるものを左結合、「右から左へ」評価されるものを右結合と呼びます。
例えば、a - b - c という式は減算が左結合であるため、(a - b) - c の順序で評価されます。
C言語の演算子 優先順位・結合性一覧表
以下の表に、C言語の主な演算子の優先順位(高い順)と結合性をまとめました。
| 優先順位 | 演算子 | 演算子の意味 | 結合性 |
|---|---|---|---|
| 1 | () [] -> . | 関数呼び出し 配列参照 構造体メンバーへのアクセス(ポインタ経由) 構造体メンバーへのアクセス | 左から右 |
| 2 | ! ~ + - ++ -- & * sizeof | 論理否定 1の補数(ビット反転) 単項プラス 単項マイナス インクリメント演算子 デクリメント演算子 アドレス演算子 間接参照(ポインタ) 変数や型のサイズを返す・型キャスト | 右から左 |
| 3 | * / % | 乗算 除算 剰余 | 左から右 |
| 4 | + - | 加算 減算 | 左から右 |
| 5 | << >> | 左シフト 右シフト | 左から右 |
| 6 | < <= > >= | より小さい 以下 より大きい 以上 | 左から右 |
| 7 | == != | 等しい 等しくない | 左から右 |
| 8 | & | ビットごとのAND | 左から右 |
| 9 | ^ | ビットごとの排他的OR(XOR) | 左から右 |
| 10 | | | ビットごとのOR | 左から右 |
| 11 | && | 論理AND | 左から右 |
| 12 | || | 論理OR | 左から右 |
| 13 | ?: | 条件演算子(三項演算子) | 右から左 |
| 14 | = *= /= %= += -= &= ^= |= <<= >>= | 代入 乗算代入 除算代入 剰余代入 加算代入 減算代入 ビットAND代入 ビットXOR代入 ビットOR代入 左シフト代入 右シフト代入 | 右から左 |
| 15 | , | カンマ演算子(区切り) | 左から右 |
まとめ
演算子の優先順位と結合性を正しく理解することで、意図した通りの計算結果を得られるようになります。また、括弧 ( ) を使えば優先順位を意図的に変更できるため、複雑な式では可読性の向上のためにも積極的に活用するとよいでしょう。
-
C言語の式の評価とは?優先順位と結合規則をわかりやすく解説
C言語における式の評価の基本C言語では、コンパイラが「優先順位(precedence)」と「結合規則(associativity)」という2つのルールに基づいて式を評価します。これらのルールを正しく理解することは、意図したとおりにプログラムを動作させるために非常に重要です。優先順位(Precedence)とは1つの式の中に異なる優先度を持つ演算子が含まれている場合、Cコンパイラは優先順位のルールに従って評価を行います。優先順位が高い演算子ほど先に処理されます。例えば、次のような式を考えてみましょう。この場合、「*」(乗算)は「-」(減算)や「=」(代入)よりも優先順位が高いため、「10 * 2
-
C言語で左矢印パターンと右矢印パターンを出力するプログラム
プログラムの概要 このプログラムは、C言語を使って星(*)で構成された左矢印パターンと右矢印パターンをコンソールに出力します。ユーザーが行数を入力すると、その行数に応じた矢印の形が表示されます。for文の入れ子(二重ループ)の動きを学ぶのに最適な題材です。 アルゴリズム まず、矢印パターンを出力するための行数をユーザーから受け取ります。その後、次の手順でパターンを描画していきます。 星(*)で矢印の上半分を出力する 星(*)で逆右三角形を出力する 星(*)で矢印の下半分を出力する 星(*)で右三角形を出力する 左矢印パターンのロジック 左矢印パターンは2つのループで構成されます。前半のループ