MATLAB 中的|
和||
逻辑运算符有什么区别?
最佳答案
我确定您已经阅读了 short-circuiting operators 的文档, 而对于 element-wise operators .
一个重要的区别是元素运算符可以对数组进行运算,而短路运算符仅适用于标量逻辑操作数。
但可能关键的区别在于短路问题。对于短路运算符,表达式从左到右计算,一旦最终结果确定,则不计算剩余项。
例如,考虑
x = a && b
如果 a
的计算结果为 false
,那么我们知道 a && b
的计算结果为 false
而不管是什么b
的计算结果为。所以不需要计算b
。
现在考虑这个表达式:
NeedToMakeExpensiveFunctionCall && ExpensiveFunctionCall
我们想象 ExpensiveFunctionCall
需要很长时间来评估。如果我们可以执行其他一些廉价的测试,允许我们跳过对 ExpensiveFunctionCall
的调用,那么我们就可以避免调用 ExpensiveFunctionCall。
因此,假设 NeedToMakeExpensiveFunctionCall
的计算结果为 false
。在那种情况下,因为我们使用了短路运算符,所以 ExpensiveFunctionCall
将不会被调用。
相反,如果我们使用逐元素运算符并编写如下函数:
NeedToMakeExpensiveFunctionCall & ExpensiveFunctionCall
那么永远不会跳过对 ExpensiveFunctionCall
的调用。
事实上MATLAB documentation ,我希望您已经阅读过,其中包含一个很好的例子,很好地说明了这一点:
x = (b ~= 0) && (a/b > 18.5)
在这种情况下,如果 b
为零,我们将无法执行 a/b
。因此 b ~= 0
的测试。使用短路运算符意味着我们可以避免在 b
为零时计算 a/b
,从而避免出现运行时错误。显然,逐元素逻辑运算符无法避免运行时错误。
有关短路评估的更详细讨论,请参阅 Wikipedia article关于这个问题。
关于matlab - | 之间有什么区别?和||在 MATLAB 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14183385/