Réponses:
L'esperluette unique & est l'opérateur logique AND. La double esperluette && est à nouveau un opérateur ET logique qui utilise un comportement de court-circuit. Un court-circuit signifie simplement que le deuxième opérande (côté droit) est évalué uniquement lorsque le résultat n'est pas entièrement déterminé par le premier opérande (côté gauche)
A & B (A et B sont évalués)
A && B (B n'est évalué que si A est vrai)
d != 0 && 1/d
vs d !=0 & 1/d
- le premier ne garantit aucune division par zéro, le second ne le fait pas.
&
fait un court-circuit si dans une if
déclaration. Et &&
prend des entrées scalaires. La réponse de @ Loren ci - dessous est correcte.
&&
et ||
prendre des entrées scalaires et toujours court-circuiter. |
et &
prendre les entrées de tableau et court-circuiter uniquement dans les instructions if / while. Pour l'affectation, ces derniers ne court-circuitent pas.
Consultez ces pages de documentation pour plus d'informations.
&
et |
dans les instructions if / while? Cela ne semble pas être le cas dans R2012b et R2014a.
Comme déjà mentionné par d'autres, &
est un opérateur ET logique et &&
est un opérateur ET de court-circuit . Ils diffèrent par la manière dont les opérandes sont évalués et par le fait qu'ils fonctionnent ou non sur des tableaux ou des scalaires:
&
(Opérateur AND) et |
(opérateur OR) peuvent opérer sur des tableaux de manière élémentaire.&&
et ||
sont des versions en court-circuit pour lesquelles le deuxième opérande n'est évalué que lorsque le résultat n'est pas entièrement déterminé par le premier opérande. Ceux-ci ne peuvent fonctionner que sur des scalaires , pas sur des tableaux.Les deux sont des opérations ET logiques. Le && cependant, est un opérateur de "court-circuit". À partir de la documentation MATLAB:
Ce sont des opérateurs de court-circuit en ce qu'ils évaluent leur deuxième opérande uniquement lorsque le résultat n'est pas entièrement déterminé par le premier opérande.
En savoir plus ici .
Semblable à d'autres langages, &
est un opérateur logique au niveau du bit, tandis que &&
c'est une opération logique.
Par exemple (pardonnez ma syntaxe).
Si..
A = [True True False True]
B = False
A & B = [False False False False]
..ou..
B = True
A & B = [True True False True]
Pour &&
, l'opérande de droite n'est calculé que si l'opérande de gauche est vrai et le résultat est une valeur booléenne unique.
x = (b ~= 0) && (a/b > 18.5)
J'espère que c'est clair.
bitand
est l'opérateur AND logique au niveau du bit dans MATLAB.
&& et || sont des opérateurs de court-circuit fonctionnant sur des scalaires. & et | fonctionnent sur des tableaux et n'utilisent le court-circuit que dans le contexte d' expressions de boucle if
ou while
.
Une bonne règle de base lors de la construction d'arguments à utiliser dans des instructions conditionnelles (IF, WHILE, etc.) est de toujours utiliser le && / || formulaires, à moins qu'il y ait une très bonne raison de ne pas le faire. Il y a deux raisons ...
Faire cela, plutôt que de compter sur la résolution MATLAB des vecteurs dans & et |, conduit à un code un peu plus détaillé, mais BEAUCOUP plus sûr et plus facile à maintenir.
r((r<2)&(r<2))
".
&
peut fonctionner sur des tableaux mais&&
ne peut fonctionner que sur des scalaires.