演算子の優先順位
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2025/02/14 17:23 UTC 版)
演算子の優先順位 (えんざんしのゆうせんじゅんい、英: precedence of operators) とは、演算子を利用しているような数式などが、どのように結び付いてグループ化されるべきであるかを、優先順位すなわち構文における優先度の強弱によって、あらかじめ暗黙に定めた規則である。数学ではしばしば、目的のために新しい演算子を導入することがあるが、そういう場合に優先順位があるのなら共通の暗黙の諒解は無いのだから規則を明示する必要がある。また、プログラミング言語では以下に述べるような規則の場合もあるが、APLのように優先順位は無く常に右から左に計算する、というような言語もあるといったように、その言語の設計者の考え方次第である。
算数(初等教育での数学)などが採用している規則では、乗除の演算子は加減の演算子より優先順位が高い。この規則により、2 + 3 × 4 という式における結び付きは、括弧で明示すると 2 + (3 × 4) となる。優先順位があることで、グループ化の明示のための記号である ( と )、{ と }、[ と ] などといった括弧の多用がある程度緩和される。
例えば、一般に多項式は、
演算子の優先順位
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2018/10/15 06:55 UTC 版)
「CとC++の演算子」の記事における「演算子の優先順位」の解説
以下の表は、C++とCにおける優先順位と結合性を示したものである(なお、Java, Perl, PHPなど最近の言語の多くは同様の優先順位を持つ)。演算子は優先順位の低いものほど下のほうに掲載されている。同じセルに掲載されている演算子同士は同じ優先度を持つ。なお、たとえ多重定義しても、演算子の優先順位は変化しない。 CやC++において、演算子の構文は文脈自由文法にて定義されている。この表は、その構文より導き出されるものである。 この表では、正確に表現できていない部分が一部に存在する。たとえば、条件演算子は、代入やコンマ演算子より高い優先度を持つものの、中央のオペランドではそれらを含むすべての演算子の使用が可能である。すなわち、a ? b , c : dはa ? (b, c) : dと解釈される。また、(a ? b), (c : d)は意味を成さず、コンパイルエラーとなる。なお、括弧で囲われていない型変換式の結果はsizeofの対象となれない。つまり、sizeof (int) * xは(sizeof(int)) * xの意味となりsizeof ((int) * x)とはならない。 演算子名称結合性:: スコープ解決 (C++のみ) 左から右 ++ -- 後置インクリメント・デクリメント () 関数呼出し [] 配列添え字 . 直接メンバアクセス -> 間接メンバアクセス typeid() 実行時型情報 (C++のみ) const_cast 型変換 (C++のみ) dynamic_cast 型変換 (C++のみ) reinterpret_cast 型変換 (C++のみ) static_cast 型変換 (C++のみ) ++ -- 前置インクリメント・デクリメント 右から左 + - 単項プラスとマイナス ! ~ 論理否定とビット否定 (type) 型変換 * 間接演算子 (デリファレンス) & アドレス sizeof 記憶量 new new[] 動的記憶域確保 (C++のみ) delete delete[] 動的記憶域解放 (C++のみ) .* ->* メンバへのポインタ (C++のみ) 左から右 * / % 乗算・除算・剰余算 + - 加算・減算 << >> 左シフト・右シフト < <= (関係演算子)小なり・小なりイコール > >= 大なり・大なりイコール == != 等価・非等価 & ビット積 ^ ビット排他的論理和 | ビット和 && 論理積 || 論理和 c ? t : f 条件演算子 右から左(throwは結合しない) = 単純代入 += -= 加算代入・減算代入 *= /= %= 乗算代入・除算代入・剰余代入 <<= >>= 左シフト代入・右シフト代入 &= ^= |= ビット積代入・ビット排他的論理和代入・ビット和代入 throw 送出代入 (例外送出: C++のみ) , コンマ演算子 左から右
※この「演算子の優先順位」の解説は、「CとC++の演算子」の解説の一部です。
「演算子の優先順位」を含む「CとC++の演算子」の記事については、「CとC++の演算子」の概要を参照ください。
「演算子の優先順位」の例文・使い方・用例・文例
- 演算子の優先順位のページへのリンク