
C言語のきほん|等価・関係・論理演算子
if の条件が読めるようになる近道!== と !=、大小比較、&& と || を“言葉で読める”ようにしよう。
C言語では「条件に合うときだけ処理する」「条件を満たす間だけ繰り返す」といった制御がとても大事になります。そこで中心になるのが、比較や条件の組み合わせを作るための 等価演算子・関係演算子・論理演算子 です。
たとえば、
- 点数が 60 以上か?
- 入力値が 0 ではないか?
- 年齢が 20 以上 かつ 会員か?
- どちらか一方でも条件を満たすか?
みたいな判断を、C言語では演算子で表現していきます。
そしてこの演算子たちの結果は、真なら1、偽なら0 になります(型としては int 扱い)。
「0 以外は真」も一緒に覚えておくと、条件式を読む力がグッと上がりますよ。
比較演算子は3つの仲間に分かれる
| 分類 | 何をする? | 代表 |
|---|---|---|
| 等価演算子 | 等しいか/等しくないか | ==, != |
| 関係演算子 | 大小関係(大きい、小さい、以上、以下) | >, >=, <, <= |
| 論理演算子 | 条件の組み合わせ(かつ/または/否定) | &&, |
どれも結果は「1か0」で返ってきます。
等価演算子(== と !=)
等価演算子は「同じかどうか」を判定します。
| 演算子 | 意味 | 例 | 例の読み方 |
|---|---|---|---|
| == | 等しい | a == b | a と b は等しい? |
| != | 等しくない | a != b | a と b は違う? |
結果は 1 か 0
- 等しければ 1
- 等しくなければ 0
この 1 / 0 は int です。
よくあるミス:== と = を間違える
これは本当に多いです。しかもC言語は、間違ってもコンパイルエラーにならないことがあります。
if (number = 123) { /* 代入になってしまう */
...
}
これが危ない理由は2つあります。
- number に 123 が代入されてしまう(比較ではない)
- C言語では 0 以外は真なので、123 は真扱いになり条件が通る
つまり「意図せず毎回true」みたいな状況が起きます。
慣れるまでは、条件式の中に = が見えたら「代入じゃない?」って一回立ち止まるクセを付けると安心です。
関係演算子(>, >=, <, <=)
関係演算子は「どっちが大きい?小さい?」を判定します。
| 演算子 | 意味 | 例 | 例の読み方 |
|---|---|---|---|
| > | より大きい | a > b | a は b より大きい? |
| >= | 以上 | a >= b | a は b 以上? |
| < | より小さい | a < b | a は b より小さい? |
| <= | 以下 | a <= b | a は b 以下? |
書き方の注意
- => や =< は存在しません
- = や < = のようにスペースを入れません(>= や <= が1つの演算子)
比較の結果を確認するプログラム
等価演算子と関係演算子の結果を確認するプログラムです。
ファイル名:6_7_1.c
#include <stdio.h>
int main(void)
{
int now, target;
printf("気温を2つ入力してください。\n");
printf("現在の気温 > ");
scanf("%d", &now);
printf("基準の気温 > ");
scanf("%d", &target);
printf("\n[等価の結果]\n");
printf("%d == %d : %d\n", now, target, now == target);
printf("%d != %d : %d\n", now, target, now != target);
printf("\n[大小の結果]\n");
printf("%d > %d : %d\n", now, target, now > target);
printf("%d >= %d : %d\n", now, target, now >= target);
printf("%d < %d : %d\n", now, target, now < target);
printf("%d <= %d : %d\n", now, target, now <= target);
printf("\nメッセージ: 1は真、0は偽だよ。\n");
return 0;
}どう読み取る?
このプログラムは「比較式の結果」をそのまま数字で表示しています。
1 が出た行は「条件が成り立った」、0 が出た行は「成り立たなかった」ということです。
論理演算子(&&, ||, !)
論理演算子は「条件を組み合わせる」ために使います。if や while の条件で大活躍します。
| 演算子 | 意味 | 例 | 例の読み方 |
|---|---|---|---|
| && | かつ | (a > 0) && (b > 0) | a も b も正なら真 |
| または | |||
| ! | 否定 | !a | a が真なら偽、偽なら真 |
真偽の考え方(0以外は真)
C言語の条件判定では、次のルールが基本です。
| 値 | 条件での扱い |
|---|---|
| 0 | 偽 |
| 0以外(1, 2, -3 など) | 真 |
なので、論理演算子は「式の結果が真か偽か」を使って判断します。
論理演算を確認するプログラム(別の例に置き換え)
「会員か」「年齢条件を満たすか」というプログラム例です。
ファイル名:6_7_2.c
#include <stdio.h>
#include <stdbool.h>
int main(void)
{
bool is_member = true; /* 会員ならtrue */
bool is_adult = false; /* 20歳以上ならtrue(例としてfalseにする) */
printf("[論理積(かつ)]\n");
printf("会員かつ成人 : %d\n", is_member && is_adult);
printf("\n[論理和(または)]\n");
printf("会員または成人 : %d\n", is_member || is_adult);
printf("\n[否定(でない)]\n");
printf("会員ではない : %d\n", !is_member);
printf("\nメッセージ: trueは1、falseは0として表示されるよ。\n");
return 0;
}bool は内部的には整数として扱えるので、printf では %d で出力できます(true が 1、false が 0 のように見えます)。
条件式を「日本語で読む」コツ
条件式は、記号のまま見るより「文章」に直すと理解しやすいです。
| 条件式 | 日本語にすると |
|---|---|
| score >= 60 | 点数が60以上 |
| score < 0 | |
| (age >= 20) && is_member | 20歳以上で、会員でもある |
| !(a == b) | a と b が等しい、ではない(つまり違う) |
この「読み替え」ができるようになると、if の条件が怖くなくなります。
つまずきやすいポイント(やさしめ注意)
比較の結果は1か0だけど、条件では0以外が真
比較演算子は 1 か 0 を返します。
でも条件判定は「0以外は真」なので、比較以外の値でも真になります。
たとえば、
- if (5) は真
- if (-1) も真
「比較していないのに true になる」ことがあるので、慣れないうちは if の中は比較式を書く、と決めるのもアリです。
論理演算子は条件を“まとめる”のが仕事
&& や || は「条件を2つ以上つなぐ」ために使います。
そのとき、丸括弧を付けると読みやすさが上がります。
例:点数が合格範囲か
(score >= 0) && (score <= 100)
括弧がなくても動くことは多いですが、読みやすさのために付けるのはとても良い習慣です。
