苦しんで覚えるC言語

比較のための演算子


第1項:等値演算子

前節では ==演算子を紹介しましたが、この系統の演算子を等値演算子と呼びます。
等値演算子には、次の2種類が用意されています。
これらの演算子は、値が等しいか、そうでないかを比較するために使われます。
記号真になる偽になる
==2つの値が等しい2つの値が等しくない
!=2つの値が等しくない2つの値が等しい
次のプログラムは、入力された数が 10 であるかを判定します。

#include <stdio.h>

int main(void)
{
	int suuti;
	scanf("%d",&suuti);
	if (suuti == 10) printf("入力値は 10 です。\n");
	if (suuti != 10) printf("入力値は 10 ではありません。\n");
	return 0;
}
このプログラムを実行させて 10 を入力した場合の結果は、次の通りになります。

10 入力したデータ
入力値は 10 です。
このプログラムを実行させて 10 以外を入力した場合の結果は、次の通りになります。

135 入力したデータ
入力値は 10 ではありません。
演算子なので
この比較演算子や、次に説明する 関係、論理演算子も演算子です。
つまり、普通に数式の中に置いて、計算に使うことも出来ます。
次の数式は、変数 val1 と val2 が
等しい時には answer に(多くのコンパイラでは)1 、
等しくない時は 0 が代入されます。
answer = val1 == val2;
上級者にはこの様なやり方を好む人もいますが、わかりやすいとはいえませんので、おすすめは出来ません。
目次に戻る

第2項:関係演算子

等値演算子は2つの値が等しいかどうかを調べる演算子でしたが、
関係演算子は、2つの値の大小関係を調べる演算子です。
記号真になる偽になる
<左の値が右より小さい左の値が右より小さくない
>左の値が右より大きい左の値が右より大きくない
<=左の値が右以下左の値が右以下ではない
>=左の値が右以上左の値が右以上ではない
いまさら言うまでもないことかもしれませんが、小さいと以下の違いは、
等値を含むのか含まないかの違いです。以下&以上は、等しい場合も真を返してきます。

これらの演算子は、2つの値の大小関係を調べるために使われます。
次のプログラムは、入力された数が 10 より大きいかどうかを判定します。

#include <stdio.h>

int main(void)
{
	int suuti;
	scanf("%d",&suuti);
	if (suuti == 10) printf("入力値は 10 です。\n");
	if (suuti > 10) printf("入力値は 10 より大きいです。\n");
	if (suuti < 10) printf("入力値は 10 より小さいです。\n");
	return 0;
}
このプログラムを実行させて 10 を入力した場合の結果は、次の通りになります。

10 入力したデータ
入力値は 10 です。
このプログラムを実行させて 10 より大きい入力をした場合の結果は、次の通りになります。

135 入力したデータ
入力値は 10 より大きいです。
このプログラムを実行させて 10 より小さい入力をした場合の結果は、次の通りになります。

5 入力したデータ
入力値は 10 より小さいです。

目次に戻る

第3項:論理演算子

論理演算子は、これまでの演算子とはちょっと異なる性質を持った演算子で、
複数の条件を統合したり、判定を反転するために使われたりします。
記号意味真になる偽になる
&&かつ(AND)右と左の条件が両方真右と左の条件のどちらか片方でも偽
||または(OR)右と左の条件のどちらか片方でも真右と左の条件が両方偽
!否(NOT)条件が偽条件が真
if文では、1度に1つの条件での判定しか出来ないのですが、
これらの演算子を使用することで、複数条件での判定が可能になります。
次のプログラムは、入力された数が 8~12 の間かどうかを判定します。

#include <stdio.h>

int main(void)
{
	int suuti;
	scanf("%d",&suuti);
	if (suuti >= 8 && suuti <= 12) printf("8~12の間です。\n");
	if (!(suuti >= 8 && suuti <= 12)) printf("8~12の間ではありません。\n");
	return 0;
}
このプログラムを実行させて8~12の間を入力した場合の結果は、次の通りになります。

9 入力したデータ
8~12の間です。
このプログラムを実行させて8~12の間以外を入力した場合の結果は、次の通りになります。

3 入力したデータ
8~12の間ではありません。
このプログラムのポイントは、if文の条件の部分にあります。
if文では1つの条件での判定しか出来ないので、普通の方法では、
8以上 かつ 12以下 という条件を判定することは出来ません。
しかし、&&演算子を使うことで、2つの条件での判定が可能になります。

また、2つ目のif文の判定は、1つ目の判定に!演算子を加えただけです。
!演算子は、判定結果を逆にするという機能を持つ演算子なので、
1つ目のif文とは全く反対の結果になります。

目次に戻る