私は常に私の仕事で不必要なコーディングの議論に巻き込まれます。今日、条件付き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(||)より高い優先順位を持っていることをどのように証明するかです。そのように言語で?
最初のfalseをtrueに変更します。持っているのは馬鹿げているようですが(true || true)、それはあなたの主張を証明しています。
bool result = true || true && false; // --> true
result = (true || true) && false; // --> false
result = true || (true && false); // --> true
あなたが本当に彼を驚かせたいなら、試してください:
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とfalse
でfalse
を生成します。
私は評価の順序を示すつもりはありませんでした。ただ|
の右半分が通常は評価されない期間に評価されたという事実だけです:)
これはあなたが何を求めているのでしょうか?または多分私は何かを見逃しています...
bool result = true || false && false;
コードではなくロジックで証明します。 ANDはブール値の乗算であるのに対し、ORはブール値の加算です。今、どれがより高い優先順位を持っていますか?
false || true && true
利回り:true
false && true ||本当
利回り:true