web-dev-qa-db-ja.com

C#条件付きAND(&&)OR(||)優先順位

私は常に私の仕事で不必要なコーディングの議論に巻き込まれます。今日、条件付きAND(&&)またはOR(||)の優先順位が高いかどうかを尋ねました。同僚の1人が同じ優先順位を持っていると主張し、疑問がありました。

MSDNによれば、AND(&&)はOR(||))よりも高い優先順位を持っていますが、懐疑的な同僚に証明できますか?

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

だから私の質問は、コードでAND(&&)がOR(||)より高い優先順位を持っていることをどのように証明するかです。そのように言語で?

68
Josiah Ruddell

最初のfalseをtrueに変更します。持っているのは馬鹿げているようですが(true || true)、それはあなたの主張を証明しています。

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

あなたが本当に彼を驚かせたいなら、試してください:

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;
}

これは印刷されます:

True
False
False
-----
False

編集:

コメントへの応答:

C#では、|は、||と同じブール論理を実行する論理演算子ですが、短絡しません。また、C#では、|演算子の優先順位は、||&&の両方よりも高くなっています。

値を出力することにより、典型的な||演算子を使用した場合、最初のTrueのみが出力され、その後にTrueであった式の結果が出力されることがわかります。

ただし、|の優先順位が高いため、true | falseが最初に評価され(結果はtrue)、thenは、結果が&&edとfalsefalseを生成します。

私は評価の順序を示すつもりはありませんでした。ただ|の右半分が通常は評価されない期間に評価されたという事実だけです:)

10
John Rasch

これはあなたが何を求めているのでしょうか?または多分私は何かを見逃しています...

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

コードではなくロジックで証明します。 ANDはブール値の乗算であるのに対し、ORはブール値の加算です。今、どれがより高い優先順位を持っていますか?

5
EFraim

false || true && true

利回り:true

false && true ||本当

利回り:true

0
veggerby