wake-up-neo.com

C # bedingte AND (&&) OR (||) Vorrang

Bei meiner Arbeit stoßen wir ständig auf unnötige Codierungsargumente. Heute habe ich gefragt, ob das bedingte AND (&&) oder OR (||)) eine höhere Priorität hat. Einer meiner Mitarbeiter bestand darauf, dass sie dieselbe Priorität haben, ich hatte Zweifel, also habe ich nachgeschlagen.

Laut MSDN hat AND (&&) eine höhere Priorität als OR (||). Aber können Sie es einem skeptischen Mitarbeiter beweisen?

http://msdn.Microsoft.com/en-us/library/aa691323 (VS.71) .aspx

bool result = false || true && false; // --> false
// is the same result as
bool result = (false || true) && false; // --> false
// even though I know that the first statement is evaluated as 
bool result = false || (true && false); // --> false

Meine Frage ist also, wie Sie mit Code beweisen, dass AND (&&) eine höhere Priorität hat als OR (||)? Wenn Ihre Antwort unwichtig ist, warum wird sie dann erstellt? so in der Sprache?

68
Josiah Ruddell

Ändern Sie das erste false durch true. Ich weiß, es scheint dumm zu sein (wahr || wahr), aber es beweist deinen Standpunkt.

bool result = true || true && false;   // --> true 
     result = (true || true) && false; // --> false
     result = true || (true && false); // --> true
105
Francis B.

Wenn Sie ihn wirklich ausflippen wollen, versuchen Sie:

bool result = True() | False() && False();

Console.WriteLine("-----");
Console.WriteLine(result);

static bool True()
{
    Console.WriteLine(true);
    return true;
}

static bool False()
{
    Console.WriteLine(false);
    return false;
}

Dies wird drucken:

True
False
False
-----
False

Bearbeiten:

Als Antwort auf den Kommentar:

In C # wird | ist ein logischer Operator, der dieselbe boolesche Logik ausführt wie ||, schließt aber nicht kurz. Auch in C # ist das | Operator hat eine höhere Priorität als beide || und &&.

Wenn Sie die Werte ausdrucken, können Sie sehen, dass ich das typische || Operator, nur der erste True wird gedruckt - gefolgt vom Ergebnis des Ausdrucks, der auch True gewesen wäre.

Aber wegen der höheren Priorität von |, das true | false wird zuerst ausgewertet (was zu true führt) und dann das Ergebnis ist &&ed mit false, um false zu ergeben.

Ich habe nicht versucht, die Reihenfolge der Auswertung zu zeigen, nur die Tatsache, dass die rechte Hälfte des | wurde in einem Zeitraum ausgewertet, in dem dies normalerweise nicht der Fall ist :)

10
John Rasch

Würdest du nicht das bekommen, wonach du suchst? Oder vielleicht fehlt mir etwas ...

bool result = true || false && false;
6
Max Schmeling

Sie beweisen es nicht mit Code, sondern mit Logik. UND ist boolesche Multiplikation, wohingegen OR eine boolesche Addition ist. Welche hat nun höhere Priorität?

5
EFraim

false || Wahr, wahr

Erträge: wahr

false && true || wahr

Erträge: wahr

0
veggerby