Freigeben über


Logische C-Operatoren

Die logischen Operatoren führen logical-AND-Vorgänge ( && ) und logical-OR-Vorgänge ( || ) aus.

Syntax

logical-AND-expression:
inclusive-OR-expression
logical-AND-expression && inclusive-OR-expression

logical-OR-expression:
logical-AND-expression
logical-OR-expression || logical-AND-expression

Hinweise

Logische Operatoren führen nicht die üblichen arithmetischen Konvertierungen aus. Stattdessen werten sie jeden Operanden hinsichtlich seiner Übereinstimmung mit 0 (null) aus. Das Ergebnis einer logischen Operation ist entweder 0 (null) oder 1. Das Ergebnis hat den Typ int.

Die logischen C-Operatoren sind im Folgenden beschrieben:

Operator Beschreibung
&& Der logische AND-Operator gibt den Wert 1 an, wenn beide Operanden Werte ungleich 0 aufweisen. Wenn einer der beiden Operanden gleich 0 (null) ist, ist das Ergebnis 0 (null). Wenn der erste Operand einer logischen AND-Operation gleich 0 ist, wird der zweite Operand nicht ausgewertet.
|| Der logische OR-Operator führt eine inklusive OR-Operation für seinen Operanden aus. Das Ergebnis ist 0 (null), wenn beide Operanden den Wert 0 (null) aufweisen. Wenn einer der beiden Operanden einen Wert ungleich 0 (null) aufweist, ist das Ergebnis 1. Wenn der erste Operand einer logischen OR-Operation einen Wert ungleich 0 (null) aufweist, wird der zweite Operand nicht ausgewertet.

Die Operanden logischer UND- und logischer OR-Ausdrücke werden von links nach rechts ausgewertet. Wenn der Wert des ersten Operanden ausreicht, um das Ergebnis der Operation zu bestimmen, wird der zweite Operand nicht ausgewertet. Dieser Effekt wird als „Kurzschlussauswertung“ bezeichnet. Nach dem ersten Operanden im Ausdruck folgt ein Sequenzpunkt. Weitere Informationen finden Sie unter Sequenzpunkte.

Beispiele

Im folgenden Beispiel werden die logischen Operatoren veranschaulicht:

int w, x, y, z;

if ( x < y && y < z )
    printf( "x is less than z\n" );

In diesem Beispiel wird die printf-Funktion aufgerufen, um eine Meldung auszugeben, wenn x kleiner ist als y und y kleiner als z ist. Wenn x größer als y ist, wird der zweite Operand (y < z) nicht ausgewertet, und kein Ergebnis wird ausgegeben. Das ist ein weiterer Fall von Kurzschlussauswertungen, der beim Schreiben logischer Vergleiche berücksichtigt werden muss. Andernfalls könnten Probleme auftreten, wenn Code von den Nebenwirkungen der Auswertung des zweiten Operanden abhängig ist.

printf( "%d" , (x == w || x == y || x == z) );

In diesem Beispiel, wenn x entweder gleich w, y oder z ist, wird das zweite Argument für die printf-Funktion mit "true" ausgewertet, und der Wert 1 wird ausgegeben. Andernfalls wird dies mit "false" ausgewertet, und der Wert 0 (null) wird ausgegeben. Sobald eine der Bedingungen mit dem Ergebnis "true" ausgewertet wird, wird die Auswertung beendet.

Siehe auch