我们陷入不必要的编码参数在我的工作全部的时间。今天,我问,如果条件AND(&&)或OR(||)具有更高的优先级。我的一个同事坚持认为他们有相同的优先级,我产生了怀疑,所以我看着它。

根据MSDN AND(&&)具有比优先级或更高(||)。但是,你能证明这一点持怀疑态度的同事?

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(||)?如果你的回答是不要紧,那么为什么它建在语言呀?

有帮助吗?

解决方案

由真正改变第一假。我知道这似乎愚蠢的有(真||真),但它证明你的观点。

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)和然后将该结果与&&ed false得到false

我是不是要显示计算顺序,只是一个事实,即|的右半评价周期时,它通常不会是:)

这是不是让你你以后?或者,也许我失去了一些东西......

bool result = true || false && false;

您不代码,但与逻辑证明这一点。和是布尔乘法,而OR是布尔加。现在哪一个具有更高的优先级?

假||真&&真

收率:真

假&&真||真

收率:真

您不能只是显示在您的布尔表达式都被短路的最终结果。下面是平息你的情况的一个片段。

它依赖于实现与和|使用&&和||运营商,如noreferrer"> MSDN 7.11在

scroll top