MATLAB中的|||逻辑运算符有什么区别?

最佳答案

我确定您已经阅读了short-circuiting operatorselement-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/

10-10 09:56