カテゴリ: C言語 更新日: 2026/02/08

C言語の比較演算子を完全ガイド!初心者でもわかる== != > < >= <=の基本

C言語の比較演算子(==, !=, >, <, >=, <=)の使い方
C言語の比較演算子(==, !=, >, <, >=, <=)の使い方

先生と生徒の会話形式で理解しよう

生徒

「C言語で条件によって分岐する方法ってありますか?」

先生

「C言語では、if文を使って、簡単に条件分岐することができます。」

生徒

「具体的にはどのように使うんですか?」

先生

「それでは、基本的な使い方を見ていきましょう!」

1. if文とは?

1. if文とは?
1. if文とは?

C言語のif文は、プログラム内で条件に応じて処理を分岐させるためのものです。例えば、ある条件が「真(true)」であれば特定の処理を実行し、そうでなければスキップする、といった操作が可能になります。分岐処理を理解するうえで欠かせないのが比較演算子です。比較演算子は二つの値を比べて「同じ」「違う」「大きい」「小さい」などの関係を調べ、結果として真か偽を返します。ここでは==!=><>=<=の基本を丁寧に学びます。

2. 比較演算子の基本(結果は真か偽)

2. 比較演算子の基本(結果は真か偽)
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文と組み合わせて条件分岐

3. if文と組み合わせて条件分岐
3. if文と組み合わせて条件分岐

比較演算子はif文と組み合わせると威力を発揮します。点数の合否判定、年齢による条件、個数による料金の切替など、日常的な判定を簡潔に表現できます。


#include <stdio.h>

int main(void){
    int score = 80;
    if(score >= 70){
        printf("合格です\n");
    }else{
        printf("再挑戦です\n");
    }
    return 0;
}

合格です

この例は「七十点以上なら合格」という条件を表しています。読み手にも意味が伝わるよう、値の意味づけ(閾値や基準値)をコメントや定数名で示すとより親切です。

4. 初心者がつまずきやすいポイント(= と == の違い)

4. 初心者がつまずきやすいポイント(= と == の違い)
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. 数値型と比較(整数/小数の注意)

5. 数値型と比較(整数/小数の注意)
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. 文字と文字コードの比較

6. 文字と文字コードの比較
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を使う)

7. 文字列の比較は==ではない(strcmpを使う)
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. 複数条件の落とし穴(連鎖比較はできない)

8. 複数条件の落とし穴(連鎖比較はできない)
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. 境界値を意識した比較(=> と =< ではない)

9. 境界値を意識した比較(=> と =< ではない)
9. 境界値を意識した比較(=> と =< ではない)

英語配列の感覚で=>=<と書いてしまう人がいますが、C言語では正しくは>=<=です。境界を含むか含まないかは仕様の重要点なので、条件文では等号の位置まで丁寧に確認しましょう。


#include <stdio.h>

int main(void){
    int age = 18;
    if(age >= 18){
        printf("対象です\n");
    }else{
        printf("対象外です\n");
    }
    return 0;
}

対象です

「以上」「以下」の要件は現場でよく議論になります。誤解を防ぐため、コメントに「十八歳含む」のように自然言語で補足しておくと親切です。

10. 読みやすさと保守性を高めるコツ

10. 読みやすさと保守性を高めるコツ
10. 読みやすさと保守性を高めるコツ

比較の左側に変数右側に定数を置くと読みやすくなります。また、定数名を使うと意図が明確になります。数字を直接書くより、意味のわかる名前で比較しましょう。


#include <stdio.h>
#define PASS 70

int main(void){
    int score = 68;
    if(score >= PASS){
        printf("合格\n");
    }else{
        printf("不合格\n");
    }
    return 0;
}

不合格

このように定数や列挙値を活用すると、将来の仕様変更にも強いコードになります。

カテゴリの一覧へ
新着記事
New1
C++
C++のメンバアクセス演算子を完全解説!初心者でもわかる . → :: の使い方まとめ
New2
Rust
Rustの文字列を極める!&str(文字列スライス)の基本概念とString型との違い
New3
C++
C++のキャスト演算子を完全解説!dynamic_cast・static_cast・const_cast・reinterpret_castを初心者向けに説明
New4
C++
C++開発のIDE選びを完全ガイド!初心者でもわかるCLion・Eclipse CDT・Qt Creator比較
人気記事
No.1
Java&Spring記事人気No1
C++
C++の主要な実装をわかりやすく解説!GCC・Clang・MSVCの違いと特徴
No.2
Java&Spring記事人気No2
C言語
C言語を学ぶ初心者におすすめの環境構築手順【2025年版】
No.3
Java&Spring記事人気No3
C言語
C言語をオンラインで実行できる便利なコンパイラサービスまとめ【初心者向け】
No.4
Java&Spring記事人気No4
C言語
C言語のソースコードとヘッダファイルの役割とは?初心者向けにわかりやすく解説!
No.5
Java&Spring記事人気No5
C言語
C言語開発でよく使われるエディタとIDEランキング【初心者向け完全ガイド】
No.6
Java&Spring記事人気No6
C言語
Visual Studio CodeでC言語を実行する方法【拡張機能の設定と実行手順】
No.7
Java&Spring記事人気No7
C++
C++リンカとコンパイラのオプション設定を完全ガイド!初心者にもわかる開発環境の基礎
No.8
Java&Spring記事人気No8
C言語
C言語の列挙型(enum)の使い方を完全ガイド!初心者でもわかる基本操作