和&之间的区别是什么?和&&在MATLAB?

时间:2009-09-04 13:52:32

标签: matlab logical-operators short-circuiting

MATLAB中&&&逻辑运算符之间有什么区别?

7 个答案:

答案 0 :(得分:87)

单&符号&是逻辑AND运算符。双&符号&&再次成为采用短路行为的逻辑AND运算符。短路只意味着仅在第一个操作数(左侧)未完全确定结果时才评估第二个操作数(右侧)

A& B(评估A和B)

A&& B(仅在A为真的情况下评估B)

答案 1 :(得分:30)

&&||始终采用标量输入和短路。 |&仅在if / while语句中采用数组输入和短路。对于分配,后者不会短路。

有关详细信息,请参阅these doc pages

答案 2 :(得分:15)

正如其他人已经提到的那样,&logical AND operator&&short-circuit AND operator。它们在如何评估操作数以及它们是否在数组或标量上运行时有所不同:

  • &(AND运算符)和|(OR运算符)可以以元素方式对数组进行操作。
  • &&||是短路版本,仅当第一个操作数未完全确定结果时才评估第二个操作数。这些只能在标量上运行,而不能在阵列上运行。

答案 3 :(得分:8)

两者都是逻辑AND操作。和&&虽然,是一个“短路”运营商。来自MATLAB文档:

  

它们是短路运算符,因为只有当第一个操作数没有完全确定结果时,它们才会计算第二个操作数。

查看更多here

答案 4 :(得分:5)

与其他语言类似,&是逻辑按位运算符,而&&是逻辑运算。

例如(原谅我的语法)。

如果..

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)

希望这很清楚。

答案 5 :(得分:4)

&安培;&安培;和||是short circuit运营商在标量上运作。 &安培;和|对数组进行操作,use short-circuiting仅在ifwhile循环表达式的上下文中运行。

答案 6 :(得分:2)

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

  1. 正如其他人所提到的,&amp;&amp; / ||的短路行为类似于大多数类C语言。这种相似性/熟悉度通常被认为是有利于它的一点。
  2. 使用&amp;&amp;或||表单强制你编写完整的代码来决定你对vector参数的意图。当a = [1 0 0 1]且b = [0 1 0 1]时,a&amp; b是真还是假?我不记得MATLAB&amp;的规则,可以吗?大多数人不能。另一方面,如果你使用&amp;&amp;或者||,你强行要写“完全”代码来解决这个问题。
  3. 这样做,而不是依赖于MATLAB在&amp ;;中的矢量分辨率。和|,导致代码更冗长,但更安全,更容易维护。

相关问题