和&之间有什么不同和&&在matlab?

时间:2011-11-28 19:12:01

标签: matlab

  

可能重复:
  What's the difference between & and && in MATLAB?

这是来自帮助

  &   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中是否同时满足两个条件。

3 个答案:

答案 0 :(得分:5)

简答

  • 当A和B为标量时,请使用 &&
  • 当A和B为向量时,请使用 &

长答案

- 当您使用A && B时,它评估A,如果A为零,那么它不评估B,因为无论B是什么是的,答案是0。

- 但是,当AB是向量时:首先,使用&&会产生错误。其次,&将使用CPU的一些快速指令集来同时计算多个和 - 操作。第三,在这种情况下,matlab无法使用先前对&的惰性求值,因为它不知道如何仅评估B的子集。

答案 1 :(得分:4)

区别在于对B.的评价。

正如您引用的帮助文字中所述,如果&&为false,则B不评估A。它没有必要,因为A and B的整个结果是错误的,所以为什么要浪费精力。

另一方面,有时你需要评估AB(想想副作用,评估B可能做的不仅仅是返回它的值),所以&将会每次评估AB

答案 2 :(得分:2)

鉴于表达式A & BA && B相比,差异在于,如果A很容易为假,则短路逻辑AND永远不会评估B。如果例如B的评估需要很长时间,这可能是有益的。

例如:

if( shortcalculation(A) && longcalculation(B) ) ...

如果shortcalculation(A)已经返回false,我们可以通过使用短路逻辑AND来运行longcalculation(B)

如果您希望始终评估A和B而不管其真实值如何,则应使用&代替。