!演算子のオペランドは,スカラ型をもたなければならない。
論理否定演算子!の結果は,そのオペランドの値が0と比較して等しくない場合0とし,等しい場合1とする。結果の型は,intとする。式!Eは,(0==E)と等価とする。
!はスカラ型のオペランドに適用できるので,整数型だけではなく,浮動小数点型やポインタ型にも適用できる。
オブジェクトの値が真の時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