2016-05-30 5 views
-6
int main() 
{ 
    int i = 10; 
    if (i ==20 || 30) 
     printf("true"); 
    else 
     printf("false"); 
    return 0; 
} 

der Ausgang ist 'True', warum?Was ist die Ausgabe des folgenden Codes in c? Warum?

und wenn wir ersetzen || mit & & welche Änderung wird auftreten?

+4

Vielleicht möchten Sie sich die Vorrangstellung des Operators in C ansehen. – EOF

+1

Welche Änderung trat auf, wenn '||' durch '&&' ersetzt wurde? –

+0

https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcR6AXCu_I-ZkA1LxaK_a5LP-D69XBOlOPyhAx2XNgAvoeCefb4HRBq4dOFt –

Antwort

1

Da jeder Wert außer 0 wahr ist. In der Bedingung heißt es, wenn i gleich 20 ist, was falsch oder um 30 ist, ist das wahr und macht die ganze Aussage wahr. Wenn Sie das oder mit einem ändern, wird die Aussage falsch sein.

0

30 ist logisch wahr. Jeder Wert ungleich Null ist wahr. Der OR-Ausdruck wird als wahr ausgewertet, weil die 30 logisch wahr ist.

Ändern Sie das OR zu UND bewirkt, dass der Ausdruck logisch falsch wird.

3

Wie bei jeder Übersetzung zwischen Sprachen, bewahren Sie nicht unbedingt die Bedeutung, indem Sie Wort für Wort ersetzen. Der englische Ausdruck "x ist y oder z" tendiert dazu, in den technischen Sprachen als etwas mehr analog zu "x ist y oder x ist z" oder "x ist ein Element der Sammlung, die y und z enthält" zu übersetzen.

Was Sie wollen, ist i == 20 || i == 30.

Der Ausdruck, den Sie schrieben, i == 20 || 30 übersetzt zu "i ist 20, oder wahr", was das gleiche wie "wahr" ist. Der Grund dafür ist, dass 30 in diesem Zusammenhang effektiv in einen booleschen Wert konvertiert wird, und da 30 ungleich Null ist, wird es in "true" konvertiert.

Eine dritte Variation, die Sie vielleicht geschrieben haben, ist i == (20 || 30), die i == 1 entsprechen würde (weil 20 und 30 in True konvertieren, dann True konvertiert zurück zu 1).

2

Wegen operator precedence die Bedingung

int i = 10; 
if (i == 20 || 30) 

entspricht

if ((i == 20) || 30) 

so der erste Test, wenn falsch, die zweite, nicht 0 ist, als wahr ausgewertet wird. Da eine der beiden Bewertungen wahr ist, ist der gesamte Test wahr.

Was passiert, wenn Sie || durch && ersetzen?

if ((i == 20) && 30) 

hier, da eine der beiden Auswertungen falsch ist, ist der ganze Test falsch.

Verwandte Themen