Operatorvorrang - Ausdrucksauswertung

8

Für das folgende Code-Snippet bekomme ich die Ausgabe als 1 . Ich möchte wissen, wie es dazu kam?

%Vor%     
Babanna Duggani 28.03.2011, 13:45
quelle

7 Antworten

7

i=x<y<z; wird als i=(x<y)<z interpretiert, was wiederum als i=1<z interpretiert wird, was zu 1 führt.

    
yan 28.03.2011, 13:50
quelle
2

10 ist kleiner als 20, was zu 1 führt, und 1 ist kleiner als 5, was zu 1 führt. C verknüpft keine relationalen Operatoren wie einige andere Sprachen.

    
Ignacio Vazquez-Abrams 28.03.2011 13:51
quelle
1

Es funktioniert wie folgt: Da < ein logischer Ausdruck ist, ist x<y , d. H.% Co_de% wahr, also 1. So wird 10<20 , d. H.% Co_de%, was wiederum wahr ist, d. H. 1, das 1<z zugewiesen ist. Also 1<5 ist 1.

    
Chaithra 28.03.2011 13:52
quelle
0

Dies liegt daran, dass Ihr Code wie folgt ausgewertet wird:

%Vor%     
Eugene Burtsev 28.03.2011 13:50
quelle
0

Welche Ausgabe wolltest du?

In C

%Vor%
  

Wenn die Bedingung false ergibt, ist der zurückgegebene Wert 0 und andernfalls 1   Auch x & lt; y & lt; z wird als ((x & lt; y) & lt; z) bewertet.

    
N 1.1 28.03.2011 13:50
quelle
0
%Vor%     
Kasma 28.03.2011 13:52
quelle
0

C ++ unterstützt keine mehrteiligen Vergleiche wie diese.

%Vor%

wird als

interpretiert %Vor%

oder das heißt, bestimmen, ob x < y , dann sehen, ob das boolean ist kleiner als z .

Es gibt einige Diskussionen über warum das ist in der Softwareentwicklung StackExchange .

Wenn Sie dies versuchen, müssen Sie es stattdessen als zwei separate Vergleiche schreiben, die durch einen booleschen Wert verbunden sind:

%Vor%     
Xiong Chiamiov 03.11.2016 00:06
quelle

Tags und Links