【C言語】
否定演算子の使い方 2回ビックリ!!すると 必ず0か1になる

ビックリマーク!は 論理否定演算子

否定演算子(ビックリマーク)のトリッキーな使い方

#include <stdio.h>

int main(void){
    for(int x = -10 ;x<= 10 ;x++){
        int y = !!x;    //2回ビックリすると必ず0か1になる
        printf("%3d➡%d\n",x,y);
    }
}

タイトル通りで特に落ちはありません。

非ゼロの時⇒!非ゼロは0⇒!0⇒1
ゼロの時 ⇒!ゼロは1⇒!1⇒0


➡実行結果

./a.out
-10➡1
 -9➡1
 -8➡1
 -7➡1
 -6➡1
 -5➡1
 -4➡1
 -3➡1
 -2➡1
 -1➡1
  0➡0
  1➡1
  2➡1
  3➡1
  4➡1
  5➡1
  6➡1
  7➡1
  8➡1
  9➡1
 10➡1

※任意の定数を真偽値(0/1)に変換したい時の小技です。


否定演算子の普通の使い方

#include <stdio.h>
#include <ctype.h>

int main(void){
    char str[] = "a1b2c3d+-/*";
    
    for(char *cp = str ;*cp != '\0';cp++){
        if(isalpha(*cp)){//もし、アルファベットならば
            putchar(*cp);
        }
    }
    putchar('\n');
    
    //否定演算子ビックリマークの使い方
    for(char *cp = str ;*cp != '\0';cp++){
        if(!isalpha(*cp)){//もし、アルファベットでなければ
            putchar(*cp);
        }
    }
    putchar('\n');
}

➡実行結果

./a.out
abcd
123+-/*