MATLAB中&
和&&
逻辑运算符之间有什么区别?
答案 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仅在if
或while
循环表达式的上下文中运行。
答案 6 :(得分:2)
构造用于条件语句(IF,WHILE等)的参数时,一个好的经验法则是总是使用&amp;&amp; / ||形式,除非有一个很好的理由不这样做。有两个原因......
这样做,而不是依赖于MATLAB在&amp ;;中的矢量分辨率。和|,导致代码更冗长,但更安全,更容易维护。