ログイン
kid's world

演算子の決まりごと

演算子の決まりごと

優先順位

コンピュータに演算子を使って計算をさせるとき,数学で習った計算と同じように優先順位があることはもうわかっているだろう。実は,このことは算術演算子に限った話ではない。算術演算子以外も含めたすべての演算子に対して優先順位が決まっている。

Table 1: 演算子の順序と結合規則

/c/string-table1.png

Table 1の優先順位に従えば,

i = j * 20 + 10;

という文は,

i = ((j * 20) + 10);

という文に等しいことになる。この文を何げなく「代入」と考えるとあたりまえのように感じるが,これは代入演算子の優先順位が算術演算子よりも低いためにうまくいっているのであって,仮に優先順位が狂ったとすれば,

(i = (j * 20)) + 10;

というわけのわからない計算をしてしまうことになる。しかし実際はそうならないように,優先順位がうまく決められているのだ。

このように代入も算術演算もすべて演算子であり,優先順位のおかげで全体的な式の意味が狂わないようになっている,ということを知っていただきたい。

結合規則

ところで,ここまでの解説で少し疑問に思ったことはないだろうか。

i = j = 10;

という文が,

i = (j = 10);

という順序で計算されたと,われわれはすんなり受け入れてしまっていた。しかし,なぜ次のようにはならなかったのだろう。

(i = j) = 10;

実は,これは結合規則というものに従っているために,後者のような順序にはならなかったのである。結合規則とは,優先順位が同じ演算子が2つ以上並んだとき,右と左のどちらの演算子を優先させるかを決めるために必要な概念である(この順序についてもTable 1に書いてあるので,それを参照していただきたい)。

たとえば加算をする「+」演算子の結合規則は,左から右である。したがって,

i + j + k

という式は,左側の演算子から優先されるので,

(i + j)+ k

という意味になる。

今の解説で,何げなく「式」という言葉を使ったが,実は「i + j + k」これ自体もまた,式である。よって,

variable =i + j + k;

というあたりまえのように書いてきた文は,「i + j + k」が式となるために,文法的に正しい文,

変数 = 式;

となり,variableという名前の変数に,「i + j + k」の値が,代入演算子「=」によって代入されるということになる。

これらの事実がわかってくると,一見不思議に見えることがいろいろとできるようになるのだが,ここでは混乱を招くだけなので,その話は差し控えておこう。


トークン」へ進む

広告


©Toshio Koide 1996-2007.

目次

リンクについて

リンクは御自由にどうぞ。

メール

mail.gif

広告