C言語の比較演算子を完全ガイド!初心者でもわかる== != > < >= <=の基本
生徒
「C言語で条件によって分岐する方法ってありますか?」
先生
「C言語では、if文を使って、簡単に条件分岐することができます。」
生徒
「具体的にはどのように使うんですか?」
先生
「それでは、基本的な使い方を見ていきましょう!」
1. if文とは?
C言語のif文は、プログラム内で条件に応じて処理を分岐させるためのものです。例えば、ある条件が「真(true)」であれば特定の処理を実行し、そうでなければスキップする、といった操作が可能になります。分岐処理を理解するうえで欠かせないのが比較演算子です。比較演算子は二つの値を比べて「同じ」「違う」「大きい」「小さい」などの関係を調べ、結果として真か偽を返します。ここでは==、!=、>、<、>=、<=の基本を丁寧に学びます。
2. 比較演算子の基本(結果は真か偽)
比較演算子は、左右の値を比べて評価結果を返します。C言語では「真」はゼロ以外の数、「偽」はゼロで表されます。表示のときはprintfで数値として出力されます。まずは代表的な六つの記号の意味を押さえましょう。
==:等しい(左右が同じなら真)!=:等しくない(違えば真)>:より大きい<:より小さい>=:以上<=:以下
#include <stdio.h>
int main(void){
int a = 5, b = 3;
printf("%d\n", a == b); // 0 (偽)
printf("%d\n", a != b); // 1 (真)
printf("%d\n", a > b); // 1 (真)
printf("%d\n", a < b); // 0 (偽)
printf("%d\n", a >= b); // 1 (真)
printf("%d\n", a <= b); // 0 (偽)
return 0;
}
0
1
1
0
1
0
結果は整数として表示されますが、if文では「ゼロかどうか」で判断されます。ゼロなら偽、ゼロ以外なら真として扱われます。
3. if文と組み合わせて条件分岐
比較演算子はif文と組み合わせると威力を発揮します。点数の合否判定、年齢による条件、個数による料金の切替など、日常的な判定を簡潔に表現できます。
#include <stdio.h>
int main(void){
int score = 80;
if(score >= 70){
printf("合格です\n");
}else{
printf("再挑戦です\n");
}
return 0;
}
合格です
この例は「七十点以上なら合格」という条件を表しています。読み手にも意味が伝わるよう、値の意味づけ(閾値や基準値)をコメントや定数名で示すとより親切です。
4. 初心者がつまずきやすいポイント(= と == の違い)
最も多いミスは、代入の=と、等価比較の==の混同です。C言語では=は「右の値を左に入れる」、==は「左右が等しいか比べる」です。書き間違えると意図しない動作になります。
#include <stdio.h>
int main(void){
int x = 0;
if(x = 1){ // <-- 代入してしまっている!
printf("真です\n");
}else{
printf("偽です\n");
}
return 0;
}
真です
これはxに一を代入した結果(ゼロ以外)を判定しているため、常に真になります。意図は「x == 1なら真」だったはずです。必ず==を使いましょう。
5. 数値型と比較(整数/小数の注意)
整数型同士の比較は直感的ですが、小数(浮動小数点)の比較は注意が必要です。計算の丸め誤差により、見た目に同じでも完全一致にならない場合があります。小数は「等しいか」ではなく「差が十分に小さいか」で判定するのが安全です。
#include <stdio.h>
#include <math.h>
int main(void){
double a = 0.1 * 3.0;
double b = 0.3;
if(fabs(a - b) < 1e-9){
printf("ほぼ等しい\n");
}else{
printf("等しくない\n");
}
return 0;
}
ほぼ等しい
このように、浮動小数点では許容誤差を設けるのが定番です。整数比較なら==で問題ありません。
6. 文字と文字コードの比較
char型は文字のように見えますが実体は数値(文字コード)です。'A' < 'Z'のような比較は可能です。日本語の文字列など複数バイトの扱いは難易度が上がるため、初心者のうちは英数字の単文字で比較の感覚をつかむと安心です。
#include <stdio.h>
int main(void){
char c = 'B';
if(c == 'A'){
printf("エーです\n");
}else if(c > 'A'){
printf("エーより後です\n");
}else{
printf("エーより前です\n");
}
return 0;
}
エーより後です
7. 文字列の比較は==ではない(strcmpを使う)
初心者が混乱しやすいのが文字列の比較です。C言語の文字列は「文字の配列」へのポインタであり、==は中身ではなくアドレスを比べてしまいます。文字列の内容を比べたいときはstrcmpを使います。
#include <stdio.h>
#include <string.h>
int main(void){
const char *s1 = "yes";
const char *s2 = "yes";
if(strcmp(s1, s2) == 0){ // 中身が等しいか
printf("同じ\n");
}else{
printf("違う\n");
}
return 0;
}
同じ
strcmpは等しいときにゼロを返します。これも「ゼロが偽では?」と戸惑いやすい点ですが、if(strcmp(...) == 0)のように明示すれば読みやすく安全です。
8. 複数条件の落とし穴(連鎖比較はできない)
数学では0 < x < 10のように連続して書けますが、C言語で同じ書き方をすると意味が変わってしまいます。Cでは一つ目の比較が先に評価され、その結果の真偽(ゼロまたは非ゼロ)が次の比較に使われるため、期待した判定になりません。範囲判定は論理演算子でつなぎます。
#include <stdio.h>
int main(void){
int x = 5;
if(0 < x && x < 10){ // 正しい書き方
printf("範囲内\n");
}else{
printf("範囲外\n");
}
return 0;
}
範囲内
&&(そして)や||(または)と組み合わせるのがC言語の基本ルールです。
9. 境界値を意識した比較(=> と =< ではない)
英語配列の感覚で=>や=<と書いてしまう人がいますが、C言語では正しくは>=、<=です。境界を含むか含まないかは仕様の重要点なので、条件文では等号の位置まで丁寧に確認しましょう。
#include <stdio.h>
int main(void){
int age = 18;
if(age >= 18){
printf("対象です\n");
}else{
printf("対象外です\n");
}
return 0;
}
対象です
「以上」「以下」の要件は現場でよく議論になります。誤解を防ぐため、コメントに「十八歳含む」のように自然言語で補足しておくと親切です。
10. 読みやすさと保守性を高めるコツ
比較の左側に変数、右側に定数を置くと読みやすくなります。また、定数名を使うと意図が明確になります。数字を直接書くより、意味のわかる名前で比較しましょう。
#include <stdio.h>
#define PASS 70
int main(void){
int score = 68;
if(score >= PASS){
printf("合格\n");
}else{
printf("不合格\n");
}
return 0;
}
不合格
このように定数や列挙値を活用すると、将来の仕様変更にも強いコードになります。