プログラミング言語の演算子は、コンパイラまたはインタプリタに、特定の数学的、関係的または論理的演算を実行し、最終結果を生成するように指示するシンボルです。
Cには多くの強力な演算子があります。多くのC演算子は2項演算子です。つまり、2つのオペランドを持ちます。たとえば、 a / b
では、 /
は2つのオペランド( a
、 b
)を受け入れるバイナリ演算子です。 1つのオペランド(たとえば、 ~
、 ++
)を取る単項演算子と、1つの三項演算子しかないものがあり? :
。
演算子は、 アリティ 、 優先順位 、および結合性を持っています 。
Arityはオペランドの数を示します。 Cでは、3つの異なる演算子が存在します。
優先順位は、どのオペレータが最初にオペランドに「バインド」するかを示します。すなわち、どのオペレータがそのオペランドを操作する優先順位を有するかである。例えば、C言語は、乗算と除算が加算と減算よりも優先されるという規則に従います。
a * b + c
同じ結果を与える
(a * b) + c
これが欲しかったものでない場合、すべての演算子の中で最も高い優先順位を持つため、カッコを使用して優先順位を強制することができます。
a * (b + c)
この新しい式は、前の2つの式とは異なる結果を生成します。
C言語には多くの優先レベルがあります。以下の表は、すべての演算子の優先順位の降順で示しています。
優先順位表
演算子 | 関連性 |
---|---|
() [] -> . | 左から右へ |
! ~ ++ -- + - * (間接参照) (type) sizeof | 右から左へ |
* (乗算) / % | 左から右へ |
+ - | 左から右へ |
<< >> | 左から右へ |
< <= > >= | 左から右へ |
== != | 左から右へ |
& | 左から右へ |
^ | 左から右へ |
| | 左から右へ |
&& | 左から右へ |
|| | 左から右へ |
?: | 右から左へ |
= += -= *= /= %= &= ^= |= <<= >>= | 右から左へ |
, | 左から右へ |
Associativityは、優先順位の等しい演算子がデフォルトでどのようにバインドするかを示し、 左から右 、 右 から左の 2種類があります。 左から右へのバインディングの例は、減算演算子( -
)です。表現
a - b - c - d
3つの同一優先順位の減算がありますが、
((a - b) - c) - d
左端のために-
その2つのオペランドに最初にバインドします。
右から左への結合性の例は、逆参照*
および後置増数++
演算子です。どちらも同じ優先順位を持っているので、
* ptr ++
、これは
* (ptr ++)
一番右の単項演算子( ++
)が最初にその単一オペランドにバインドするためです。