103

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

4

7 回答 7

97

单个 & 是逻辑 AND 运算符。双 && 又是一个逻辑 AND 运算符,它采用短路行为。短路仅意味着仅当结果未完全由第一个操作数(左侧)确定时才评估第二个操作数(右侧)

A & B(评估 A 和 B)

A && B (仅当 A 为真时才评估 B)

于 2009-09-04T14:00:40.227 回答
38

&&||始终采用标量输入和短路。 |并且&仅在 if/while 语句中采用数组输入和短路。对于赋值,后者不要短路。

有关更多信息,请参阅这些文档页面

于 2009-09-08T12:02:50.357 回答
17

正如其他人已经提到的那样,&是一个逻辑 AND 运算符并且&&是一个短路 AND 运算符。它们的不同之处在于操作数的评估方式以及它们是否对数组或标量进行操作:

  • &(AND 运算符)和|(OR 运算符)可以按元素方式对数组进行操作。
  • &&并且||是短路版本,仅当结果未完全由第一个操作数确定时才评估第二个操作数。这些只能在标量上操作,而不是数组。
于 2009-09-04T14:07:15.863 回答
8

两者都是逻辑与运算。&& 虽然是一个“短路”运算符。来自 MATLAB 文档:

它们是短路运算符,因为它们仅在结果未完全由第一个操作数确定时才评估第二个操作数。

在这里查看更多。

于 2009-09-04T14:01:26.183 回答
6

&是逻辑元素运算符,而&&是逻辑短路运算符(只能对标量进行操作)。

例如(请原谅我的语法)。

如果..

A = [True True False True]
B = False
A & B = [False False False False]

..或者..

B = True
A & B = [True True False True]

对于&&,仅当左操作数为真时才计算右操作数,结果是单个布尔值。

x = (b ~= 0) && (a/b > 18.5)

希望这很清楚。

于 2009-09-04T14:03:28.460 回答
4

&& 和 || 是在标量上运行的短路算子。& 和 | 对数组进行操作,并且仅在or循环表达式的上下文中使用短路。ifwhile

于 2009-09-04T14:02:27.743 回答
2

在构造用于条件语句(IF、WHILE 等)的参数时,一个好的经验法则是始终使用 &&/|| 表格,除非有很好的理由不这样做。有两个原因...

  1. 正如其他人所提到的, &&/|| 的短路行为 类似于大多数类 C 语言。这种相似性/熟悉度通常被认为是对其有利的一点。
  2. 使用 && 或 || forms迫使您编写完整的代码来决定您对向量参数的意图。当 a = [1 0 0 1] 和 b = [0 1 0 1] 时,a&b 是真还是假?我不记得 MATLAB 的 & 规则了,你可以吗?大多数人做不到。另一方面,如果您使用 && 或 ||,您将被迫“完整”编写代码来解决该条件。

这样做,而不是依赖于 MATLAB 对 & 和 | 中的向量的解析,会导致代码更加冗长,但更安全且更易于维护。

于 2011-08-16T05:21:21.383 回答