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)
在这种情况下,如果
a/b
为零,我们将无法执行b
。因此,对b ~= 0
进行测试。短路运算符的使用意味着我们避免在a/b
为零时避免计算b
,因此避免了运行时错误。显然,基于元素的逻辑运算符将无法避免运行时错误。有关短路评估的详细讨论,请引用主题中的Wikipedia article。
关于matlab - 和|有什么区别?和||在MATLAB中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14183385/