論理否定演算子

コンピュータ

論理否定演算子

ろんりひていえんざんし

プログラム言語Cにおける!(論理否定演算子,logical negation operator)

!演算子オペランドは,スカラ型をもたなければならない。

論理否定演算子!の結果は,そのオペランドの値が0と比較して等しくない場合0とし,等しい場合1とする。結果の型は,intとする。式!Eは,(0==E)と等価とする。

JISX3010:2003 6.5.3.3 単項算術演算子

!はスカラ型のオペランドに適用できるので,整数型だけではなく,浮動小数点型やポインタ型にも適用できる。

オブジェクトの値が真の時1,偽の時0を得るために !!E とするハックもある。

サンプルコード

#include <stdio.h>
int main(void){
	int a = 1234;
	int * b = &a;
	int * c = NULL;
	printf("!1234 = %d, !0 = %d\n", !a, !0);
	printf("0==1234 = %d, 0==0 = %d\n\n", 0==a, 0==0);
	printf("!12.34 = %d, !0.0 = %d\n", !12.34, !0.0);
	printf("0==12.34 = %d, 0==0.0 = %d\n\n", 0==12.34, 0==0.0);
	printf("!b = %d, !c = %d\n", !b, !c);
	printf("0==b = %d, 0==c = %d\n", 0==b, 0==c);
}

サンプル出力

!1234 = 0, !0 = 1
0==1234 = 0, 0==0 = 1

!12.34 = 0, !0.0 = 1
0==12.34 = 0, 0==0.0 = 1

!b = 0, !c = 1
0==b = 0, 0==c = 1