这是来自帮助
& Element-wise Logical AND.
A & B is a matrix whose elements are logical 1 (TRUE) where both A
and B have non-zero elements, and logical 0 (FALSE) where either has
a zero element. A and B must have the same dimensions (or one can
be a scalar).
&& Short-Circuit Logical AND.
A && B is a scalar value that is the logical AND of scalar A and B.
This is a "short-circuit" operation in that MATLAB evaluates B only
if the result is not fully determined by A. For example, if A equals
0, then the entire expression evaluates to logical 0 (FALSE), regard-
less of the value of B. Under these circumstances, there is no need
to evaluate B because the result is already known.
我想知道&和&&执行相同的功能?无论A和B的尺寸是多少,只要它们具有相同的尺寸?
是&&效率更高,因此我们应该使用&& amp;每时每刻?
一种情况是测试while
中是否同时满足两个条件。
答案 0 :(得分:5)
&&
&
- 当您使用A && B
时,它评估A
,如果A
为零,那么它不评估B
,因为无论B
是什么是的,答案是0。
- 但是,当A
和B
是向量时:首先,使用&&
会产生错误。其次,&
将使用CPU的一些快速指令集来同时计算多个和 - 操作。第三,在这种情况下,matlab无法使用先前对&
的惰性求值,因为它不知道如何仅评估B
的子集。
答案 1 :(得分:4)
区别在于对B.的评价。
正如您引用的帮助文字中所述,如果&&
为false,则B
不评估A
。它没有必要,因为A and B
的整个结果是错误的,所以为什么要浪费精力。
另一方面,有时你需要评估A
和B
(想想副作用,评估B可能做的不仅仅是返回它的值),所以&
将会每次评估A
和B
。
答案 2 :(得分:2)
鉴于表达式A & B
与A && B
相比,差异在于,如果A很容易为假,则短路逻辑AND永远不会评估B
。如果例如B
的评估需要很长时间,这可能是有益的。
例如:
if( shortcalculation(A) && longcalculation(B) ) ...
如果shortcalculation(A)
已经返回false,我们可以通过使用短路逻辑AND来运行longcalculation(B)
。
如果您希望始终评估A和B而不管其真实值如何,则应使用&
代替。