What's the difference between & and && in MATLAB?

MatlabLogical OperatorsShort Circuiting

Matlab Problem Overview


What is the difference between the & and && logical operators in MATLAB?

Matlab Solutions


Solution 1 - Matlab

The single ampersand & is the logical AND operator. The double ampersand && is again a logical AND operator that employs short-circuiting behaviour. Short-circuiting just means the second operand (right hand side) is evaluated only when the result is not fully determined by the first operand (left hand side)

A & B (A and B are evaluated)

A && B (B is only evaluated if A is true)

Solution 2 - Matlab

&& and || take scalar inputs and short-circuit always. | and & take array inputs and short-circuit only in if/while statements. For assignment, the latter do not short-circuit.

See these doc pages for more information.

Solution 3 - Matlab

As already mentioned by others, & is a logical AND operator and && is a short-circuit AND operator. They differ in how the operands are evaluated as well as whether or not they operate on arrays or scalars:

  • & (AND operator) and | (OR operator) can operate on arrays in an element-wise fashion.
  • && and || are short-circuit versions for which the second operand is evaluated only when the result is not fully determined by the first operand. These can only operate on scalars, not arrays.

Solution 4 - Matlab

Both are logical AND operations. The && though, is a "short-circuit" operator. From the MATLAB docs:

> They are short-circuit operators in that they evaluate their second operand only when the result is not fully determined by the first operand.

See more here.

Solution 5 - Matlab

& is a logical elementwise operator, while && is a logical short-circuiting operator (which can only operate on scalars).

For example (pardon my syntax).

If..

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

..or..

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

For &&, the right operand is only calculated if the left operand is true, and the result is a single boolean value.

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

Hope that's clear.

Solution 6 - Matlab

&& and || are short circuit operators operating on scalars. & and | operate on arrays, and use short-circuiting only in the context of if or while loop expressions.

Solution 7 - Matlab

A good rule of thumb when constructing arguments for use in conditional statements (IF, WHILE, etc.) is to always use the &&/|| forms, unless there's a very good reason not to. There are two reasons...

  1. As others have mentioned, the short-circuiting behavior of &&/|| is similar to most C-like languages. That similarity / familiarity is generally considered a point in its favor.
  2. Using the && or || forms forces you to write the full code for deciding your intent for vector arguments. When a = [1 0 0 1] and b = [0 1 0 1], is a&b true or false? I can't remember the rules for MATLAB's &, can you? Most people can't. On the other hand, if you use && or ||, you're FORCED to write the code "in full" to resolve the condition.

Doing this, rather than relying on MATLAB's resolution of vectors in & and |, leads to code that's a little bit more verbose, but a LOT safer and easier to maintain.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionFantomasView Question on Stackoverflow
Solution 1 - MatlabFraserView Answer on Stackoverflow
Solution 2 - MatlabLorenView Answer on Stackoverflow
Solution 3 - MatlabgnoviceView Answer on Stackoverflow
Solution 4 - MatlabMarkView Answer on Stackoverflow
Solution 5 - MatlabErik KerberView Answer on Stackoverflow
Solution 6 - MatlabDimaView Answer on Stackoverflow
Solution 7 - MatlabBob GilmoreView Answer on Stackoverflow