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).
Vielleicht möchten Sie sich die Vorrangstellung des Operators in C ansehen. – EOF
Welche Änderung trat auf, wenn '||' durch '&&' ersetzt wurde? –
https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcR6AXCu_I-ZkA1LxaK_a5LP-D69XBOlOPyhAx2XNgAvoeCefb4HRBq4dOFt –