C#条件AND(&&)OR(||)优先
-
20-09-2019 - |
题
我们陷入不必要的编码参数在我的工作全部的时间。今天,我问,如果条件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在