8.4 Der !-Operator (logischer Operator)
Den logischen !-Operator (NOT-Operator) haben Sie eben schon kennengelernt. Dieser Operator wird oft falsch verstanden, weswegen ihm ein eigenes Kapitel gewidmet ist. Der !-Operator ist ein unärer Operator und kann einen Wert bzw. eine Bedingung negieren. Dies bedeutet, er kann aus »wahr« »falsch« machen und umgekehrt. Dazu ein Programmbeispiel:
/* logic_not1.c */ #include <stdio.h> int main(void) { int checknummer; printf("Bitte geben Sie Ihren Code-Schlüssel ein: "); scanf("%d", &checknummer); if( ! (checknummer == 4711) ) { printf("Error - Falscher Code-Schlüssel \n"); } else { printf("Success - Login erfolgreich \n"); } return 0; }
Zur Erklärung der if-Bedingung im Programm:
if( !(checknummer == 4711) )
Hier wird der Ausdruck zwischen den Klammern geprüft. Das bedeutet, der !–Operator überprüft den Wert in der Klammer und gibt 1 (wahr) zurück, falls der Wert in der Klammer nicht 4711 ist. Ist der Wert aber gleich 4711, dann wird 0 (falsch) zurückgegeben. Das Programm fährt daraufhin mit der else-Verzweigung fort und gibt aus, dass Sie die richtige Zahl eingegeben haben.
Tabelle 8.2 zeigt die verschiedenen Verwendungsmöglichkeiten.
Anweisung | == | Anweisung |
if(a != 0) |
gleich |
if(a) |
if(a == 0) |
gleich |
if(!a) |
if(a > b) |
gleich |
if(! (a <= b) ) |
if( (a-b) == 0) |
gleich |
if(! (a-b) ) |
Hier sehen Sie ein weiteres Programmbeispiel zur Verdeutlichung:
/* logic_not2.c */ #include <stdio.h> int main(void) { int zahl1, zahl2; printf("Bitte Zahl 1 eingeben: "); scanf("%d", &zahl1); printf("Bitte Zahl 2 eingeben: "); scanf("%d", &zahl2); if(!zahl1) printf("Error: Der Wert ist gleich 0!! \n"); else if(!zahl2) printf("Error: Der Wert ist gleich 0!! \n"); else printf("%d/%d = %f \n", zahl1, zahl2, (float) zahl1/zahl2); return 0; }
Sie vermeiden mit diesem Programm eine Division durch 0. Sollte also keine der beiden Zahlen dem Wert 0 entsprechen, wird mit (float) zahl1/zahl2 eine Division durchgeführt. Sie verwenden hier ein explizites Type-Casting, damit der Wert nach dem Komma nicht einfach abgeschnitten wird.
Hinweis |
Als alternative Schreibweise für den logischen !-Operator können Sie seit dem C99-Standard auch das Makro not verwenden, das in der Headerdatei <iso646.h> definiert ist. Die Schreibweise if( !a ) entspricht somit exakt if( not a ). |
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.