&&
,||
,!
論理演算子は,関係演算子同様,真の場合には 1
,偽の場合には 0
を int
型で返します。
■論理演算子(Logical Operators) | ||
x&&y | 論理AND演算子 (Logical AND Operator) | 論理積 (AND,∧):一方が 0 の場合には 0 を,両方とも 0 以外ならば 1 を返す。 |
x||y | 論理OR演算子 (Logical OR Operator) | 論理和 (OR,∨):一方が 0 以外ならば 1 を,両方とも 0 ならば 0 を返す。 |
!x | 論理否定演算子 (Logical Negation Operator) | 否定 (NOT,¬):これは (x == 0) と同じ。x が 0 ならば 1 を,0 以外ならば 0 を返す。 |
スカラ型のすべてをオペランドにとれる。
論理積については,第1オペランドが 0
ならば,第2オペランドを評価しません。論理和については,第1オペランドが 0
に等しくなければ,第2オペランドを評価しません。
/* Example 7.6 */ #include <stdio.h> int main(void) { int x = 0, y = 1; printf("(1) !(!x && !y)\t= %d\n", !(!x && !y)); printf("(2) x||y\t= %d\n", x||y); return 0; }
実行結果です。
(1) !(!x && !y) = 1 (2) x||y = 1
(1) と (2) は同じになります。「ド・モルガンの法則」です。
/* Example 7.7 */ #include <stdio.h> int main(void) { char c = '\0'; printf("!'\\0' = %d\n", !c); return 0; }
実行結果です。
!'\0' = 1
ナル文字 '\0'
は ASCIIコード番号 0
の文字であり,それは 0
に等しいです。