質問

我々は、すべての-時、私の仕事で、不必要なコーディングの引数に入ります。今日、私は尋ねた条件AND(&&)またはOR(||)持っていた優先順位が高い場合。私の同僚の一つは、彼らが同じ優先順位を持っていたと主張し、私は疑問を持っていたので、私はそれを見上げました。

MSDNによるAND(&&)高い優先順位よりもOR(||)を持っています。しかし、あなたが懐疑的な同僚にそれを証明することができますか?

http://msdn.microsoft.com/en -us /ライブラリ/ 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(||)優先順位が高いですか?あなたの答えは、それは問題ではない場合には、なぜそれが言語でそのように構築されているのですか?

役に立ちましたか?

解決

真で最初に偽を変更します。私は(真|| 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をもたらす)と最初に評価され、次にはその結果が&&を得falsefalseedされます。

私は評価の順序、それが正常にできないだろうというとき|の右半分は期間を評価したという事実だけを表示しようとしていませんでした。)

これはあなたが後にしている何を得ないでしょうか?それとも私が何かが欠けています...

bool result = true || false && false;

あなたはコードではなく、ロジックでそれを証明していません。 ORはブール加えているのに対し、ブール乗算です。今、どちらが優先順位が高い?

偽||真&&真

利回り:真

偽&&真||真

利回り:真

あなたは自分のブール式が短絡されている最終的な結果を表示することはできません。ここにあなたのケースを決済抜粋です。

|

これは、実装&とに依存しています MSDN 7.11で述べたように&&と||で使用される演算子、条件論理演算子する

public static void Test()
{
    B t = new B(true);
    B f = new B(false);

    B result = f || t && f;

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

public class B {
    bool val;
    public B(bool val) { this.val = val; }
    public static bool operator true(B b) { return b.val; }
    public static bool operator false(B b) { return !b.val; }
    public static B operator &(B lhs, B rhs) { 
        Console.WriteLine(lhs.ToString() + " & " + rhs.ToString());
        return new B(lhs.val & rhs.val); 
    }
    public static B operator |(B lhs, B rhs) { 
        Console.WriteLine(lhs.ToString() + " | " + rhs.ToString());
        return new B(lhs.val | rhs.val); 
    }
    public override string ToString() { 
        return val.ToString(); 
    }
}

出力は&&は||前に最初に評価されていることを示す必要があります。

True & False
False | False
-----
False

余分な楽しみのために、結果= Tでそれを試してみてください|| T && Fと短絡して何が起こるかを見ます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top