比較演算子には、以下のものがある。
|
これらの比較演算子を使って、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
の条件文が、比較演算の では
なく、代入演算の
になっている点にある。本来ならば、
なの
で、
と
とは異なっており、
if
文の中は実行されない筈であるが、
実はこの例では実行されてしまう。比較演算の を代入演算の
に間違えた
だけなのだが、実は、代入演算は演算なので演算結果が存在する。代入演算の
結果は代入した値になるという決まりなので、
の結果は、
が
より
になる。これは、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
に
代入されるのである。