ユーニックス総合研究所

  • home
  • archives
  • c-not-eq

C言語のノットイコール演算子の使い方

  • 作成日: 2022-08-01
  • 更新日: 2023-12-25
  • カテゴリ: C言語

C言語のノットイコール演算子の使い方

C言語の演算子にノットイコール(!=)演算子があります。
これを使うとAとBが違うものかどうか判断することができます。

たとえばif分ではノットイコール演算子は↓のように使います。

#include <stdio.h>  

int main(void) {  
    int a = 1;  
    if (a != 2) {  
        printf("2ではありません\n");  
    }  

    return 0;  
}  

↑の「a != 2」という比較は左の変数aと右の値2が同じでないか?
という比較です。

両者が同じものでないならこの演算の結果は真になり同じものであれば偽になります。
↑のコードを実行すると「2ではありません」と出力されます。
つまり「a != 2」の結果は真です。

関連記事

目が覚めるC言語のdo-while文の使い方【ループ処理、初心者向け】
明快!C言語のcontinue文の使い方
君はまだC言語のdefineのすべてを知らない【マクロ、プリプロセス】
プログラミングのポインタをわかりやすく解説【C言語】
コードで見るC言語とC++の7つの違い

ノットイコール演算子の結果を肉眼で確認する

ノットイコール演算子の結果を肉眼で確認しましょう。
↓のようなコードを書いてください。

#include <stdio.h>  

int main(void) {  
    printf("1 != 2 ... %d\n", 1 != 2);  // 1  
    printf("1 != 1 ... %d\n", 1 != 1);  // 0  
    return 0;  
}  

↑のコードを実行すると「1 != 2」の結果は「1」で真です。
そして「1 != 1」の結果は「0」で偽です。

if文では「1」は真として扱われます。
また「0」は偽として扱われます。

ノットイコールと国語

「AはBではない」というのがノットイコール(!=)演算子です。
「AはBである」というのはイコール(==)演算子です。

「変数Aと変数Bは同じ値ではない」がノットイコール。
「変数Aと変数Bの値は同じである」がイコール。

ノットイコールは比較対象が両方が同じでないことを期待します。
イコールは両方が同じであることを期待します。

「お前とお前は違うものだろ? そうだろ?」と探りを入れるのがノットイコール。
「君たちは同じだよね?」と探りを入れるのがイコールです。

🦝 < ち、ちがう。俺たちは違うんだ

🐭 < うーん、確保!

複雑な条件式

ノットイコール演算子もAND(&&)やOR(||)と組み合わせると複雑になります。
たとえば↓の条件式を見てください。

    // AND  
    result = (1 != 2 && 2 != 3);  
    printf("%d\n", result);  // 1  

    result = (4 != 5 && 6 != 6);  
    printf("%d\n", result);  // 0  

↑の「(1 != 2 && 2 != 3)」という演算の結果は「1」になります。
つまり12ではないし且つ23ではないので真になるということです。

いっぽう「(4 != 5 && 6 != 6)」という演算の結果は「0」になります。
45ではありませんが66なので右側の比較が偽になります。
そうするとAND(&&)は両方が真でないと真にならないので結果は偽になります。

なかなか複雑かもしれませんがANDはまだ直感的です。
次はORを見てみましょう。

    // OR  
    result = (1 != 2 || 3 != 3);  
    printf("%d\n", result);  // 1  

    result = (4 != 4 || 5 != 5);  
    printf("%d\n", result);  // 0  

↑の「(1 != 2 || 3 != 3)」という演算の結果は「1」で真です。
これは1 != 2は真で3 != 3は偽になってます。
OR(||)はどちらかの式が真なら真になりますのでこの演算の結果は真になります。

(4 != 4 || 5 != 5)」という演算の結果は「0」で偽になります。
4 != 45 != 5もどちらも偽です。
OR(||)はどちらかが真でないと真になりませんので結果は偽になります。

ORはちょっと直感的ではないかもしれません。

ではもーっと複雑な条件式を見てみましょう。

    // NOT + AND  
    result = !(1 != 2 && 3 != 4);  
    printf("%d\n", result);  // 0  

    result = !(5 != 5 && 6 != 6);  
    printf("%d\n", result);  // 1  

NOT(!)とAND(&&)の組み合わせです。
ここまで来るとかなり複雑かもしれません。

!(1 != 2 && 3 != 4)」という演算を見てみます。
これは1 != 2が真で3 != 4も真です。
ですのでANDの結果は真になります。
しかしNOTで結果が反転するので最終的には偽になります。

!(5 != 5 && 6 != 6)」はどうでしょうか。
5 != 5は偽で6 != 6も偽です。
ですのでANDの結果は偽になります。
NOTで反転すると最終的な結果は真になります。

    // NOT + OR  
    result = !(1 != 1 || 2 != 2);  
    printf("%d\n", result);  // 1  

    result = !(3 != 4 || 5 != 5);  
    printf("%d\n", result);  // 0  

NOT(!)とOR(||)の組み合わせです。

!(1 != 1 || 2 != 2)」という式は結果は真になります。
1 != 1は偽で2 != 2も偽です。
OR演算子はどちらかが真なら真になりますが両方が偽だと偽になります。
よって結果は偽です。
その結果をNOTで反転しているので最終的な結果は真になります。

!(3 != 4 || 5 != 5)」の式の結果は偽になります。
3 != 4の結果は真で5 != 5の結果は偽です。
片方が真なので真になり、それがNOTで反転するので最終的に偽になります。

このようにノットイコールはAND, OR, NOTなどと組み合わせると非常に複雑になります。
人によっては直感的な結果を得られない感じがするので注意が必要です。

おわりに

今回はC言語のノットイコール演算子について見てみました。
この演算子はよく使われるのでチェックしておきましょう。

🦝 < 俺らは双子じゃないんだ

🐭 < 幽体離脱できない・・・