wie man die Äquivalenz mehrerer Variablen in C testen kann

7

Sagen wir, ich wollte nicht nur eine, sondern mehrere Variablen für die Äquivalenz in einer if-Anweisung testen:

%Vor%

Aber das scheint nicht zu funktionieren. Welcher andere Ansatz kann dies tun?

    
Fergus 22.12.2009, 17:05
quelle

10 Antworten

26
%Vor%

Das Ergebnis des Ausdrucks a == b ist ein ganzzahliger Wert von 0 oder 1. Der Operator == ist linksassoziativ, daher wird der Ausdruck a == b == c als (a == b) == c ; Das heißt, das Ergebnis von a == b (0 oder 1) wird mit dem Wert von c verglichen. Also im folgenden Code

%Vor%

Der Ausdruck wird nur dann als wahr ausgewertet, wenn a == b und c == 1 oder a! = b und c == 0.

    
John Bode 22.12.2009 17:13
quelle
10
%Vor%     
Sani Singh Huttunen 22.12.2009 17:08
quelle
9
%Vor%     
AraK 22.12.2009 17:08
quelle
6

Wenn sie Ganzzahlen sind, können Sie bitweise Operationen verwenden:

%Vor%

Es wird zu wahren IFF ausgewertet, sie sind alle gleich

    
rmn 22.12.2009 19:07
quelle
3

Hier ist ein anderer Ansatz, bei dem eine Hilfsvariable ( count_equals ) verwendet wird, so dass es einfach ist ( und zu verstehen), was Sie wollen.

%Vor%     
pmg 22.12.2009 17:49
quelle
1

Die hier vorgestellten Lösungen sind größtenteils korrekt und leicht zu verstehen.

Aber ich würde das bevorzugen Lösung von Sany Huttunen :

zitiert:

%Vor%

Hier ist der Grund warum :

Obwohl es in diesem konkreten Fall nicht möglich scheint, hat es mich sofort dazu gebracht, über das Refactoring nachzudenken, wie in:

%Vor%

, das in

vereinfacht werden könnte %Vor%

Wie erwähnt, ist es jedoch nicht möglich, in diesem konkreten Fall zu vereinfachen, weil

%Vor%

folgt dann verschiedenen mathematischen Regeln

%Vor%

Das hat mit kommutativen, assoziativen und distributiven Regeln zu tun, wenn ich mich richtig erinnere.

    
anon 22.12.2009 19:50
quelle
0

Funktioniert nicht, weil (x1 == x2) die Zahl 1 ergibt, falls wahr, und 0 wenn falsch, übrigens. (x1 == x2 == x3) endet mit der Auswertung als ((x1 == x2) == x3).

Sie müssten dafür Ihre eigene Funktion schreiben, denke ich.

    
M1EK 22.12.2009 17:08
quelle
0

Hier ist eine andere Methode, die Boolesche Logik verwendet

%Vor%

Ein guter Compiler kann dies unter Verwendung von bedingten Assembleranweisungen codieren und die Befehlsvorablesewarteschlange nicht unterbrechen.

    
Thomas Matthews 22.12.2009 22:52
quelle
0

Der folgende C-Code sollte Ihre Frage beantworten:

%Vor%     
aJ. 22.12.2009 17:09
quelle
-1

Ihr Problem ist die falsche Verwendung des Operators ==. Sie müssten etwas wie:

verwenden %Vor%     
Josh Weatherly 22.12.2009 17:09
quelle

Tags und Links