布尔表达式的计算顺序是什么
In what order are boolean expressions evaluated
我一直在寻找对布尔表达式求值顺序的解释,但找不到。
看看这个声明:
if (locClsTanken.PlaceID == -1 && locRwF.PlaceID > -1 || locClsTanken.DagPrijs == 0)
这个评价如何。
会不会是这样:
if ((locClsTanken.PlaceID == -1 && locRwF.PlaceID > -1) || locClsTanken.DagPrijs == 0)
或者像这样:
if (locClsTanken.PlaceID == -1 && (locRwF.PlaceID > -1 || locClsTanken.DagPrijs == 0))
是否有关于此的文档?我不知道正确的搜索词,因为英语不是我的语言。
我知道我可以测试它,但我想找到关于它的文档,以便我能完全理解它
&&
的优先级高于||
,所以
locClsTanken.PlaceID == -1 && locRwF.PlaceID > -1 || locClsTanken.DagPrijs == 0
被评估为
(locClsTanken.PlaceID == -1 && locRwF.PlaceID > -1) || locClsTanken.DagPrijs == 0
请注意 &&
和 ||
也是短路的,因此只有在左侧操作数的计算结果可能发生变化时才会对右侧操作数进行计算。
参考:https://msdn.microsoft.com/en-gb/library/aa691323(v=vs.71).aspx
除了 &&
比 ||
具有更高的优先级之外,表达式是从左到右读取的。
所以在你的情况下它会像
if ((locClsTanken.PlaceID == -1 && locRwF.PlaceID > -1) || locClsTanken.DagPrijs == 0)
而您正在寻找的技术温度是
运算符优先级看看这个link:Operators Precedence
在 C# 中,编译器从左向右移动,这意味着它将首先计算最左边的表达式(在您的情况下是 locClsTanken.PlaceID == -1
)
此外,&&
的优先级高于 ||
--> 首先评估
然而,编译器如何处理 &&
和 ||
可能会让您感到困惑。 &
和&&
是有区别的。
&
意味着两个表达式都必须为真并且两个表达式都被计算。但是,&&
只会导致先计算一个表达式。如果第一个表达式失败,则甚至不会计算第二个表达式,因为要使 &&
为真,两个表达式都需要为真。如果第一个已经失败 &&
始终为 false --> &&
比 &
快并且更多 "inteligent"
我一直在寻找对布尔表达式求值顺序的解释,但找不到。
看看这个声明:
if (locClsTanken.PlaceID == -1 && locRwF.PlaceID > -1 || locClsTanken.DagPrijs == 0)
这个评价如何。
会不会是这样:
if ((locClsTanken.PlaceID == -1 && locRwF.PlaceID > -1) || locClsTanken.DagPrijs == 0)
或者像这样:
if (locClsTanken.PlaceID == -1 && (locRwF.PlaceID > -1 || locClsTanken.DagPrijs == 0))
是否有关于此的文档?我不知道正确的搜索词,因为英语不是我的语言。
我知道我可以测试它,但我想找到关于它的文档,以便我能完全理解它
&&
的优先级高于||
,所以
locClsTanken.PlaceID == -1 && locRwF.PlaceID > -1 || locClsTanken.DagPrijs == 0
被评估为
(locClsTanken.PlaceID == -1 && locRwF.PlaceID > -1) || locClsTanken.DagPrijs == 0
请注意 &&
和 ||
也是短路的,因此只有在左侧操作数的计算结果可能发生变化时才会对右侧操作数进行计算。
参考:https://msdn.microsoft.com/en-gb/library/aa691323(v=vs.71).aspx
除了 &&
比 ||
具有更高的优先级之外,表达式是从左到右读取的。
所以在你的情况下它会像
if ((locClsTanken.PlaceID == -1 && locRwF.PlaceID > -1) || locClsTanken.DagPrijs == 0)
而您正在寻找的技术温度是 运算符优先级看看这个link:Operators Precedence
在 C# 中,编译器从左向右移动,这意味着它将首先计算最左边的表达式(在您的情况下是 locClsTanken.PlaceID == -1
)
此外,&&
的优先级高于 ||
--> 首先评估
然而,编译器如何处理 &&
和 ||
可能会让您感到困惑。 &
和&&
是有区别的。
&
意味着两个表达式都必须为真并且两个表达式都被计算。但是,&&
只会导致先计算一个表达式。如果第一个表达式失败,则甚至不会计算第二个表达式,因为要使 &&
为真,两个表达式都需要为真。如果第一个已经失败 &&
始终为 false --> &&
比 &
快并且更多 "inteligent"