C言語基礎|等価演算子

if文の形式と構文― 等価演算子による条件判定 ―

プログラムの分岐処理では、「二つの値が同じかどうか」を判断したい場面がとても多く登場します。
ユーザーが入力した値をチェックしたり、計算結果が期待どおりか確認したりするためです。

ここでは 等価演算子 を使って条件を作り、
if文の構文と組み合わせてプログラムの流れを制御する方法を学んでいきましょう。

等価演算子で値を比較する

まずは次の問題を考えてみましょう。

二つの整数値を読み込み、それらが同じ数かどうかを判定して表示する。

この処理では、「等しいかどうか」を調べるための演算子が必要になります。
それが 等価演算子 です。

サンプルプログラム①:二つの数が一致するか調べる

プロジェクト名:chap3-4-1 ソースファイル名:chap3-4-1.c

Visual Studio でこのプログラムを実行するには、SDLチェック設定を変更しておく必要があります。
1.プロジェクト名を右クリックして、「プロパティ」をクリックします。
2.「C/C++」→「全般」→「SDLチェック」を「いいえ」に切り替えて「OK」をクリックします。

// 読み込んだ二つの整数値が一致するか調べる
#include <stdio.h>

int main(void)
{
    int x, y;

    puts("二つの整数を入力してください。");
    printf("1つ目の整数:");
    scanf("%d", &x);
    printf("2つ目の整数:");
    scanf("%d", &y);

    if (x == y)
        puts("二つの数は同じ値です。");
    else
        puts("二つの数は異なる値です。");

    return 0;
}

実行例

二つの整数を入力してください。
1つ目の整数:8
2つ目の整数:8
二つの数は同じ値です。

二つの整数を入力してください。
1つ目の整数:3
2つ目の整数:9
二つの数は異なる値です。

== 演算子の働き

if文の制御式に使われている

x == y

が、今回の主役である 等価演算子 です。

== 演算子の特徴

演算子意味
a == ba と b の値が等しければ 1、違えば 0 を生成
a != ba と b の値が等しくなければ 1、等しければ 0 を生成

生成される 1 や 0 は int型の値 です。
if文では、この値が 非0か0か によって処理が分岐します。

if文の制御式としての評価

先ほどのプログラムでは、次のように動作しています。

  • x と y が同じ値
    → x == y の結果は 1
    → if 側の文が実行される
  • x と y が異なる値
    → x == y の結果は 0
    → else 側の文が実行される

このように、比較結果そのものが条件判定に使われている点が重要です。

!= 演算子を使った書き換え例

同じ処理でも、!= 演算子を使って書くこともできます。

if (x != y)
    puts("二つの数は異なる値です。");
else
    puts("二つの数は同じ値です。");

制御式と文の対応関係が逆になるだけで、意味は同じです。
このような書き換えができるようになると、条件分岐の理解が一段深まります。

注意:= と == の違い

初心者がつまずきやすいポイントとして、次の点は必ず押さえておきましょう。

  • = は 代入演算子
  • == は 比較演算子
x = y    // 代入
x == y   // 比較

== と != は 2文字で1つの演算子 です。
途中に空白を入れて = = や ! = と書くことはできません。

サンプルプログラム②:最下位の桁を比較する

等価演算子は、計算結果と値を比較するときにもよく使われます。

次は、入力された整数の最下位桁が 3 かどうかを判定する例です。

プロジェクト名:chap3-4-2 ソースファイル名:chap3-4-2.c

Visual Studio でこのプログラムを実行するには、SDLチェック設定を変更しておく必要があります。
1.プロジェクト名を右クリックして、「プロパティ」をクリックします。
2.「C/C++」→「全般」→「SDLチェック」を「いいえ」に切り替えて「OK」をクリックします。

// 読み込んだ整数の最下位桁が3かどうかを判定
#include <stdio.h>

int main(void)
{
    int num;

    printf("整数を入力してください:");
    scanf("%d", &num);

    if (num % 10 == 3)
        puts("最下位の桁は3です。");
    else
        puts("最下位の桁は3ではありません。");

    return 0;
}

実行例

整数を入力してください:23
最下位の桁は3です。

整数を入力してください:58
最下位の桁は3ではありません。

演算子の優先順位にも注意しよう

この制御式では

num % 10 == 3

という式が使われています。

% 演算子は == 演算子よりも 優先順位が高い ため、

(num % 10) == 3

として評価されます。
そのため、括弧は省略しても正しく動作しますが、
読みやすさのために括弧を付ける書き方もおすすめです。

まとめ:if文と等価演算子の関係

ここまでで、次のポイントが理解できたはずです。

  • if文は制御式の評価結果によって処理を分岐する。
  • == と != は値の等しさを判定する等価演算子
  • 等価演算子は 1 または 0 を生成する。
  • if文では「非0かどうか」が重要
  • 計算結果と値を比較する場面でも頻繁に使われる。

この考え方は、後で学習する 関係演算子論理演算子 にもつながっていきます。
まずは「比較の結果が条件になる」という感覚を、しっかり身につけておきましょう。