next up previous contents
Next: 3.3 真でない場合の判断 Up: 3. 制御構造1 判断 Previous: 3.1 簡単な判断

3.2 比較演算

先のセクションで、if 文の条件式について述べたが、2つの数の比較が 出来ると更に便利である。このために、c言語では、比較演算というものが ある。比較演算の結果は整数の0又は1の値なので、if 文の条件式として 使うことが出来、正しい場合は1を、間違っている場合は、0の値を持つ。

 

比較演算子には、以下のものがある。

==
等号 2つの数が等しいときに真となる。
      1 == 2      間違っているので、結果は 0
      4 == 4      正しいので、結果は 1
代入記号と間違え易いので注意すること。
>
大なり記号 左辺の数が右辺より大きいときに真。
        4 > 2     正しいので、結果は 1
        0 > 1     間違っているので、結果は 0
<
小なり記号 左辺の数が右辺より小さいときに真。
>=
左辺の数が右辺の数より大きいか、又は等しいときに真。
<=
左辺の数が右辺の数より小さいか、又は等しいときに真。
!=
左辺の数と右辺の数が等しくないときに真。

これらの比較演算子を使って、if 文を書くと例えば、

例 2
        a = 10;
        b = 34;
        if (a > b){
                printf("a > b \n");
        }

のように数学的な記号と同じ感覚で書くことが出来る。 ( ちなみに上の例では a > b は、間違っているので、printf は実行されない。 )

例 3 よくやる間違い
        a = 10;
        b = 34;
        if (a = b){
                printf("a == b \n");
        }

この例は文法的には間違っていないが、良くやる間違いの一つである。 どこが間違っているかというと、if の条件文が、比較演算の == では なく、代入演算の = になっている点にある。本来ならば、 a=10, b=34 なの で、ab とは異なっており、if 文の中は実行されない筈であるが、 実はこの例では実行されてしまう。比較演算の == を代入演算の = に間違えた だけなのだが、実は、代入演算は演算なので演算結果が存在する。代入演算の 結果は代入した値になるという決まりなので、a=b の結果は、b が 34 より 34 になる。これは、0ではないので、この代入演算の結果は真と判断される 訳である。

参考 先に述べたように、C 言語では実は代入は演算なのである。演算である という事は結果があるという事を意味する。例えば、掛け算は演算であるので、 3 * 4 には 12 という結果がある。これと同じように、代入演算 にも結果があり、代入の結果は代入した値という決まりになっている。例えば、 a=3 という代入の結果は、3 となる。これは、複雑なようだが、 次のような実は素晴らしい使いみちがあるので、あえてこうなっているのである。 その使いみちとは、a = b = 3 という書き方が C 言語では可能な事である。 この文によって、変数 a, b の両方に 3 が代入されるのである。 即ち、a = b * 3 ならば、b * 3 の結果が a に代入される のと同じように、a = b = 3 は、b = 3 の結果が a に 代入されるのである。



Noriyo Kanayama