Logische Operatoren
Logische Operatoren wenden standardmäßige boolesche Algebra-Operationen auf ihre Operanden an.
| Operator | Operatorname | Beispiel | Ergebnis |
|---|---|---|---|
| ! | Logisches NICHT | !a | die logische Negation von a |
| && | Logisches UND | a && b | das logische UND von a und b |
| || | Logisches ODER | a || b | das logische ODER von a und b |
Inhalt |
[bearbeiten] Logisches NICHT
Der logische NICHT-Ausdruck hat die Form
! Ausdruck |
|||||||||
wobei
| expression | - | ein Ausdruck eines beliebigen skalaren Typs |
Der logische NICHT-Operator hat den Typ int. Sein Wert ist 0, wenn Ausdruck zu einem Wert ausgewertet wird, der ungleich Null ist. Sein Wert ist 1, wenn Ausdruck zu einem Wert ausgewertet wird, der gleich Null ist. (daher ist !E dasselbe wie (0==E))
#include <stdbool.h> #include <stdio.h> #include <ctype.h> int main(void) { bool b = !(2+2 == 4); // not true printf("!(2+2==4) = %s\n", b ? "true" : "false"); int n = isspace('a'); // non-zero if 'a' is a space, zero otherwise int x = !!n; // "bang-bang", common C idiom for mapping integers to [0,1] // (all non-zero values become 1) char *a[2] = {"non-space", "space"}; puts(a[x]); // now x can be safely used as an index to array of 2 strings }
Ausgabe
!(2+2==4) = false non-space
[bearbeiten] Logisches UND
Der logische UND-Ausdruck hat die Form
lhs && rhs |
|||||||||
wobei
| lhs | - | ein Ausdruck eines beliebigen skalaren Typs |
| rhs | - | ein Ausdruck eines beliebigen skalaren Typs, der nur ausgewertet wird, wenn lhs nicht gleich 0 ist |
Der logische UND-Operator hat den Typ int und den Wert 1, wenn sowohl lhs als auch rhs ungleich Null sind. Er hat den Wert 0 andernfalls (wenn entweder lhs oder rhs oder beide gleich Null sind).
Nach der Auswertung von lhs gibt es einen Sequenzpunkt. Wenn das Ergebnis von lhs gleich Null ist, wird rhs überhaupt nicht ausgewertet (sogenannte kurzgeschlossene Auswertung).
#include <stdbool.h> #include <stdio.h> int main(void) { bool b = 2+2==4 && 2*2==4; // b == true 1 > 2 && puts("this won't print"); char *p = "abc"; if(p && *p) // common C idiom: if p is not null // AND if p does not point at the end of the string { // (note that thanks to short-circuit evaluation, this // will not attempt to dereference a null pointer) // ... // ... then do some string processing } }
[bearbeiten] Logisches ODER
Der logische ODER-Ausdruck hat die Form
lhs || rhs |
|||||||||
wobei
| lhs | - | ein Ausdruck eines beliebigen skalaren Typs |
| rhs | - | ein Ausdruck eines beliebigen skalaren Typs, der nur ausgewertet wird, wenn lhs gleich 0 ist |
Der logische ODER-Operator hat den Typ int und den Wert 1, wenn entweder lhs oder rhs ungleich Null ist. Er hat den Wert 0 andernfalls (wenn sowohl lhs als auch rhs gleich Null sind).
Nach der Auswertung von lhs gibt es einen Sequenzpunkt. Wenn das Ergebnis von lhs ungleich Null ist, wird rhs überhaupt nicht ausgewertet (sogenannte kurzgeschlossene Auswertung).
#include <stdbool.h> #include <stdio.h> #include <string.h> #include <errno.h> int main(void) { bool b = 2+2 == 4 || 2+2 == 5; // true printf("true or false = %s\n", b ? "true" : "false"); // logical OR can be used simialar to perl's "or die", as long as rhs has scalar type fopen("test.txt", "r") || printf("could not open test.txt: %s\n", strerror(errno)); }
Mögliche Ausgabe
true or false = true could not open test.txt: No such file or directory
[bearbeiten] Referenzen
- C11-Standard (ISO/IEC 9899:2011)
- 6.5.3.3 Unäre arithmetische Operatoren (S. 89)
- 6.5.13 Logischer UND-Operator (S. 99)
- 6.5.14 Logischer ODER-Operator (S. 99)
- C99-Standard (ISO/IEC 9899:1999)
- 6.5.3.3 Unäre arithmetische Operatoren (S. 79)
- 6.5.13 Logischer UND-Operator (S. 89)
- 6.5.14 Logischer ODER-Operator (S. 89)
- C89/C90-Standard (ISO/IEC 9899:1990)
- 3.3.3.3 Unäre arithmetische Operatoren
- 3.3.13 Logischer UND-Operator
- 3.3.14 Logischer ODER-Operator
[bearbeiten] Siehe auch
| Häufige Operatoren | ||||||
|---|---|---|---|---|---|---|
| Zuweisung | Inkrement Dekrement |
Arithmetik | Logisch | Vergleich | Member Zugriff |
Sonstiges |
|
a = b |
++a |
+a |
!a |
a == b |
a[b] |
a(...) |
[bearbeiten] Siehe auch
| C++ Dokumentation für Logische Operatoren
|