第3章の2 関係演算子と論理演算子

1. 比較を行う演算子

C言語には、2つの値を比較したり、複数の条件を組み合わせたりするための演算子がいくつかあり、等価演算子、関係演算子、論理演算子の3つに分類されます。これらの演算子は、比較の結果や論理的な判断を行うために必要で、6章で説明する制御文では多用されます。

これらの演算子の具体的な使い方は6章を参照してください。

2. 関係演算子

等価演算子は、2つの値が等しいかどうか、あるいは等しくないかどうかを比較するために使用します。また、関係演算子は、2つの値の大小関係を比較するために使用されます。ここでは、この両方を「関係演算子」として扱います。

これらの関数は、真のときには1を、偽のときには0を生成します。

演算子意味使用例
>より大きいif (a > b)
>=より大きいか、等しい
(以上)
if (a >= b)
<より小さいif (a < b)
<=より小さいか、等しい
(以下)
if (a <= b)
==等しいif (a == b) 
!=等しくないif (a != b)

if (a == b) を if (a = b) と間違えて記述すると、思わぬエラーの原因になります。仮に、

int a = 0;
if (a == 0)
    printf("a は 0 と等しい\n");
else
    printf("a は 0 と等しくない\n");

というプログラムで、if (a = 0) と記述したとすると、コンパイルはエラーとはならず、
表示結果は「a は 0 と等しくない」になってしまうのです。

C言語において

  • ≠0 : 真
  • =0 : 偽

という決まりがあります。

つまり、
if (0) は 「偽」の判定になります。

ですから、
if (a == 0) を if (a = 0) と記述すると、
a = 0 の代入文が働き、a は 0 になってしまいます。

つまり、
if (0) になり、判定結果は「偽」になるため、
「a は 0 と等しくない」と表示するようになるのです。

3. 論理演算子

論理演算子を用いると、複数の条件を組み合せることができます。

演算子意味使用例
&&論理積(かつ)if (a > 0 && b > 0)
||論理和(または)if (a > 0 || b > 0)
!否定(でない)if (!a) 

!aは、a==0と同じ意味になります。
C言語では、0以外の値は真、0は偽ですから、慣れたプログラマは、if(a!=0) を if(a) と
記述します。一方、if(a==0)の方はif(!a)と記述します。この表記に出くわしたとき
に戸惑わないようにしてください。

コメント