2016-08-28 5 views
-2

Ich war in C. einige Probleme im Zusammenhang mit „oder“ Operatoren LösungProbleme mit mehreren „oder“ Operatoren in C

Der Körper des Programms war wie das, was unten erwähnt:

#include<stdio.h> 

main() { 
    int i = 4, j = -1, k = 0, w, x, y, z; 
    w = i || j || k ; 
    x = i && j && k ; 
    z = i && j || k ; 

    printf("\n w=%d , x = %d", w, x); 
    printf("\n y=%d , z = %d", y, z); 
} 

Kann jemand Bitte sagen Sie mir den Mechanismus dieser Aussagen?

+1

Was ist Ihre erwartete Ausgabe? – haccks

+0

Ich denke, w = 1, x = 0, z = 1 –

+0

Warum drucken Sie Y? –

Antwort

-2

die || und & & Operatoren sind logische Operatoren, was bedeutet, dass sie die Zahlen als entweder 'wahr' oder 'falsch'

In diesem Sinne sind i und j 'wahr' und k ist 'falsch'. Also, die Berechnung des Ergebnisses:

w = 'true' oder 'true' oder 'false' = true = 1

x = 'true' und 'wahr' und 'falsch' = false = 0

z = 'true' und 'wahr' oder 'falsch' = true = 1

y nicht definiert ist und 0 oder Müll

--edit--

zu beachten, dass & enthalten & und || sind von links nach rechts Operatoren, daher wird der erste Operator immer zuerst ausgewertet.

+1

Sie sollten Assoziativität und Reihenfolge der Operationen abdecken (besonders in Fall Z) –

0

Dies sind binäre Operatoren, sie nehmen zwei Argumente. Wenn Sie mit einem komplizierteren Ausdruck konfrontiert werden, können Sie ihn in binäre Operationen unterteilen.

Zum Beispiel könnte z = i && j || k; als z = ((i && j) || k) geschrieben werden. Oder in Bildform:

z 
    = 
    || 
/\ 
    && k 
/\ 
i j 

Um zu wissen, dass der Baum dieses Layout hat man nachschauen Operatorpräzedenz (oder Sprachgrammatikregeln), sind die Regel, dass zwischen && und || zu wählen, die || ist die ' äußere 'Operation (dh niedrigere Priorität).

Diese Operatoren führen auch einen Kurzschluss durch, obwohl dies in diesem speziellen Beispiel nicht relevant ist.

Also, Blick auf die obige Tabelle, i && j gibt 1, weil sowohl i und j sind nicht Null. Die 1 || k ergibt 1, weil mindestens einer der Operanden nicht Null ist. Finally 1 ist z zugeordnet.

Sie können die richtigen Werte für w und x in ähnlicher Art und Weise zu finden, die Vorrangregel verwenden, die die am weitesten links stehende && ist die innere, wenn die Situation a && b && c, und in ähnlicher Weise für || ist.