10.4 Der !-Operator (logischer Operator)
 
Den logischen !-Operator (NOT-Operator) haben Sie eben schon kennen gelernt. 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 mit der else-Verzweigung fort und gibt aus, dass Sie die richtige Zahl eingegeben haben.
Eine Tabelle mit den verschiedenen Verwendungsmöglichkeiten:
Tabelle 10.2
Darstellung von Wahrheitswerten
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) )
|
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 Typencasting, damit der Wert nach dem Komma nicht einfach abgeschnitten wird.
|