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. 
 |