Jos*_*ell 70 c# conditional conditional-operator operator-precedence associativity
我们一直在工作中进入不必要的编码论证.今天我询问条件AND(&&)或OR(||)是否具有更高的优先级.我的一个同事坚持认为他们有同样的优先权,我有疑虑,所以我查了一下.
根据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
Run Code Online (Sandbox Code Playgroud)
所以我的问题是你如何用代码证明AND(&&)的优先级高于OR(||)?如果你的答案无关紧要,那么为什么用这种语言建立?
Fra*_* B. 108
将第一个false更改为true.我知道这似乎很愚蠢(真实|| true),但它证明了你的观点.
bool result = true || true && false; // --> true
result = (true || true) && false; // --> false
result = true || (true && false); // --> true
Run Code Online (Sandbox Code Playgroud)
Joh*_*sch 10
如果你真的想吓到他,试试:
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;
}
Run Code Online (Sandbox Code Playgroud)
这将打印:
True
False
False
-----
False
Run Code Online (Sandbox Code Playgroud)
回应评论:
在C#中,|
是一个逻辑运算符,它执行相同的布尔逻辑||
,但不会短路.此外,在C#中,|
操作者具有比这两个更高的优先级||
和&&
.
通过打印出值,您可以看到,如果我使用典型的||
运算符,则只True
打印第一个- 然后是表达式的结果True
.
但由于优先级较高|
,true | false
首先进行评估(得出true
),然后将结果&&
编辑false
为yield false
.
我并没有试图显示评估的顺序,只是事实是|
正常情况下评估期间的右半部分:)
这不会让你得到你想要的东西吗?或者也许我错过了一些东西......
bool result = true || false && false;
Run Code Online (Sandbox Code Playgroud)
你不是用代码证明它,而是用逻辑证明它.AND是布尔乘法,而OR是布尔加法.现在哪个优先级更高?