演算子は、今更なんですが、式で実行する演算を指定するものです。演算子には優先順位があります。
a + b * cとあれば、b * cが先に計算され(この値がdとすると)、その後a + dが評価されます。多くの演算子の優先順位は、数学のそれと同じです。優先順位が不明もしくは不安な場合は、先に評価したい部分を()でくくれば安全です。しかし、文法上優先順位がきちんと定められています。
優先順位 | カテゴリー | 演算子 |
---|---|---|
1 | 一次式 | x.y, f(x), a[x], x++, x--, new, typeof, checked, unchecked |
2 | 単項式 | +, -, !, ~, ++x, --x, (T)x |
3 | 乗法式 | *, /, % |
4 | 加法式 | +, - |
5 | シフト | <<, >> |
6 | 関係式および型チェック | <, >, <=, >=, is, as |
7 | 等値式 | ==, != |
8 | 論理AND | & |
9 | 論理XOR | ^ |
10 | 論理OR | | |
11 | 条件AND | && |
12 | 条件OR | || |
13 | 条件 | ?: |
14 | 代入 | =, *=, /=, %=, +=, -=, <<=, >>=, &=, ^=, |= |
同じ順位の演算子の場合、2項演算では代入演算子をのぞき左から右に結合されます(左→右結合規則)。
たとえば、「+」と「-」は優先順位が同じなので、左→右結合が適応されます。
a + b - c (a + b) - cとなります。
条件AND,ORはショートサーキット評価が行われます。
たとえば、
a && bにおいて、aがfalseならbの真偽にかかわらず式の値は偽になります。そこで、aが偽の場合はbの評価が行われません。
同様に
a || bにおいて、aがtrueならbの真偽にかかわらず式の値はtrueになります。そこで、aが真の場合bの評価は行われません。
一方、a & bとか、a | bの場合はaの真偽にかかわらず、aもbも評価されます。
実際のプログラミングで、これらを使い分けなくてはならない場面は多くはないはずです。
Update 25/Aug/2006 By Y.Kumei