Der Nulloperator in C [] (Der Nulloperator in C), Lektion, Seite 722985
https://www.purl.org/stefan_ram/pub/nulloperator_c (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram

Der Nulldetektor in C 

Der Nulldetektor »!« ist ein unärer Präfixoperator, welcher den Wert 0 erkennt.

#include <stdio.h>

int main( void )
{ printf( "%d\n", ! 3 );
printf( "%d\n", ! 2 );
printf( "%d\n", ! 1 );
printf( "%d\n", ! 0 );
printf( "%d\n", !-1 );
printf( "%d\n", !-2 );
printf( "%d\n", !-3 ); }
0
0
0
1
0
0
0
#include <stdio.h>

int main( void )
{ printf( "%d\n", ! 2.0 );
printf( "%d\n", ! 1.5 );
printf( "%d\n", ! 1.0 );
printf( "%d\n", ! 0.0 );
printf( "%d\n", !-1.0 );
printf( "%d\n", !-1.5 );
printf( "%d\n", !-2.0 ); }
0
0
0
1
0
0
0

Der Wert 1 zeigt hier an, daß die Aussage „Der Operandenwert ist 0.“ wahr ist. Daher kann man das Ergebnis 1 auch als „wahr“ und das Ergebnis 0 auch als „falsch“ ansehen.

Schränkt man diesen Operator auf diese beiden Zahlen 0 und 1 ein, so macht er aus jeder dieser beiden Zahlen gerade die andere:

#include <stdio.h>

int main( void )
{ printf( "%d\n", ! 1 );
printf( "%d\n", ! 0 ); }
0
1

Auch ein Zeichenfolgenliteral kann als Operand verwendet werden.

#include <stdio.h>
int main( void )
{ printf( "%d\n", !'0' );
printf( "%d\n", !'A' ); }
0
0

Wenn man weiterhin 0 als „falsch“ und 1 als „wahr“ ansieht, dann macht dieser Operator aus „wahr“ „falsch“ und aus „falsch“ „wahr“.

Will man diese Regel auch für die anderen Zahlen beibehalten, so muß man dann alle Zahlen außer 0 als „wahr“ ansehen, da ihre Verneinung ja „falsch“ ergibt.

Der Operand dieses Operators darf jeden der bisher vorgestellten Datentypen haben.

Eine Zeichenfolge gilt in diesem Sinne grundsätzlich als „wahr“ (ungleich 0).

#include <stdio.h>
int main( void )
{ printf( "%d\n", !"abc" );
printf( "%d\n", !"1" );
printf( "%d\n", !"0" );
printf( "%d\n", !"" ); }
0
0
0
0

Dieser Operator illustriert eine allgemein Konvention der Programmiersprache C, derzufolge 0 auch als eine Repräsentation des Wahrheitswerts „falsch“ angesehen wird und jeder andere Wert den Wahrheitswert „wahr“ darstellen kann.

Boolean-Kontext

In C gibt es öfter Stellen, an denen es nur darum geht, ob ein Wert 0 oder nicht 0 ist. Solche Stellen bezeichnen wir auch als einen Boolean-Kontext.

Anwendungsbeispiel für !
int isnotalpha( int const c ){ return !isalpha( c ); }
Zeichen c  ist kein  Buchstabe
Anwendungsbeispiel für !
int isalpha01( int const c ){ return !!isalpha( c ); }
Zeichen c  ist  ein Buchstabe (Aussage hat nur 0 oder 1 als Wert)

Übungsfragen

Welche Werte haben die folgenden Ausdrücke?

!!0

!!1

!!2

!!""

Zitate *

The result of the logical negation operator ! is 0 if the value of its operand compares

unequal to 0, 1 if the value of its operand compares equal to 0. The result has type int.

N1570 6.5.3.3p5

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram722985 stefan_ram:722985 Der Nulloperator in C Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd722985, slrprddef722985, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/nulloperator_c