Cの演算子には、優先順位(precedece)とか結合規則(associativity)とかいう物があります。 これも、入門書の最初の方に書いてあると思います。 読んだだけでは、ピンとこないかもしれません。
優先順位の表は、たいていの開発環境のHELP
に載っています。あるいは、入門書に載っています。
この表は、VC++1.51のヘルプに載っている優先順位と
結合規則の表です。画面の都合上一部しか見えていませんが
ずーーーっと下の方まで延々と続いています。
すべてを網羅的に、解説していてはきりがないので ここでは、どうしても知っておかなくてはならない 物のみを解説します。さらに、詳しく知りたい人は 入門書などを見てください。
左のプログラムでは、まずint型の変数aを宣言しています。
この時点では、aの中身はなんだかわかりません。
それに対して、a=a+3;を実行しています。
これではいけませんね。こんな簡単な、プログラムでは
間違いがすぐにわかりますが、複雑になってくると
案外この手の間違いが起こることがあります。
しかし、最近の処理系では、コンパイルの段階で、
注意されるので、大丈夫かな。
今度は、aを宣言の時に初期化しているので、大丈夫です。
また、Cでは、a=a+3;などと書くより左のように、
a+=3;と書く方が一般的です。せっかくCで書くのですから
Cらしい書き方の方が、いいですね。(a=a+3;では何だか
BASICみたいに見えてしまいます。Cプログラマは、もっと
誇りを持ちましょう!)
実行すると、予定通りa=5となりましたね。めでたし、めでたし。
次に「==」ですが、こういうように演算子が2つくっついた物は 論理演算子(logical operator)であることが多い。要するに、 論理計算の時に使う。論理計算とは、何かというと集合の時 習ったandとかorと思えばよい。(わかりやすいが、乱暴な説明) 「==」は、等価演算子(equality operator)といって「右辺と左辺が 等しいかどうか」と読めばよい。
aには、2が代入されています。
従って、(a==3)は、偽なのでこの式の値は0のはずです。
これを、bに代入しています。従ってbは0。
(a==2)は正しいので、この式の値は1です。それをcに
代入しているので、cは1。本当にそのようになっているか、
ビルドして実行してみましょう。
予想通り、b=0,c=1となりましたね。
次に、「!」ですが、これは否定演算子とか非等価演算子 (unequality operator)などと呼ばれている物です。 はやい話、打ち消しです。真を偽に、偽を真にする、と 覚えておけば間違いないでしょう。この演算子もすでに 第9章で使っていますね。 上のプログラムで、b=!(a==3);などとして 自分で実験してみてください。それとこれは、次のような 使い方がよくなされます。マイクロソフトのCの解説書 によく出てくる使い方です。
func1を呼んで、もし失敗したらfunc2を実行しなさい。 ということです。func1は、成功したら真、失敗したら 偽を返すようになっているとします。func1が、成功したとき func2が、実行されては困るのでifの中に!をつけて真偽を 逆転させているのです。 この使い方は、重要です。 func2に、失敗したときの対策を書いておけばよいですね。 こういうように、プログラムには、必ず失敗対策をつけて おきましょう。( 大学受験と同じで必ず滑り止めをつけておく)if(!func1()) func2();
i++と++jの違いは、是非この際覚えてください。
「--」も使い方は、「++」と同様です。
「||」は「または」、「&&」は「かつ」と読めば意味は通じる。
これも、すでに
第9章で使っています。(または、の方)
今回は、ずいぶんいろいろ書いたので筆者は疲れてしまいました。
まだ、「結合規則」について述べていません。これは、矢印が
右向きか、左向きかで表示されることが多いようです。
上の、表では言葉で書いてあります。
これは何かというと、同じ優先順位の演算子同士がある場合、
どの方向に向かって、計算(?)が進むかということです。
たいていは、左から右に進みます。迷ったら表を活用しましょう!
(これじゃ解説になっていない。)
必要が生じたら、その都度説明することにして、今回はこれにて
閉講!
Update Oct/26/1996 By Y.Kumei