[C言語入門] 演算子の使い方(11)
高木です。おはようございます。
この連載も半分ぐらいを終えたと思います。
多分ですが、全20回ぐらいにはなるでしょうね。
途中で投げ出すわけにもいかないので、「演算子の使い方」については最後まで書きたいと考えています。
しかし、そんなに人気コンテンツというわけでもないので、その後の展開についてはどうするか未定です。
といわけで、今回は関係演算子を解説します。
次回は等価演算子になります。
関係演算子と等価演算子はいっしょに説明してもよさそうなものですが、オペランドに要求するものが微妙に異なるなど、分けて考えたほうがよいのです。
関係演算子
関係演算子はオペランドの大小関係を判定するための不等号の演算子です。
ただし、基本ソース文字集合で表現できなければなりませんので、≦や≧ではなく、<=
や>=
を使用します。
もちろん、小なり、大なりを表す<
や>
もあります。
関係演算子のオペランドは、両方とも実数型、あるいは両方とも適合する型へのポインタでなければなりません。
ポインタの場合は関数型へのポインタではダメで、オブジェクト型または不完全型の修飾版または非修飾版だけを指定できます。
実数型というのは誤解があるといけませんので補足しておきます。
Cにおける実数型というのは、整数型と実浮動小数点型の総称です。
いいかえれば、(複素数型など)虚数型を除く算術型と考えればよいでしょう。
オペランドが実数型の場合、比較の前に「通常の算術型変換」が行われます。
その結果、負の値と符合無し整数を比較すると、負の値のほうが大きくなることがありますので注意が必要です。
オペランドがポインタ型の場合はちょっとルールが複雑で、次のどれかの条件を満たさなければなりません。
それ以外は未定義の動作になります。
- 両方のオペランドが同じ構造体のメンバーを指している。
- 両方のオペランドが同じ共用体のメンバーを指している。
- 両方のオペランドが同じ配列の要素、または配列の末尾の要素をひとつ越えたところを指している。
ただし、配列の要素でないオブジェクトについては、要素をひとつだけ持つ配列の先頭要素であるとみなします。
構造体のメンバーを指す場合、最初に記述されたメンバーは後に記述されたメンバーより小さいとみなされます。
共用体のメンバーを指す場合、すべてのメンバーへのポインタは同じであるとみなされます。
配列の要素を指す場合、添字が若い要素のほうが小さいとみなされます。
関係演算子の評価結果はint型で、判定が真であれば1、偽であれば0になります。
C++の関係演算子は評価結果がbool型になりますが、Cの場合はint型ですので注意が必要です。