Quelle est la différence entre le &
y &&
opérateurs logiques dans MATLAB ?
Une mise en garde : &
peut fonctionner sur des tableaux mais &&
ne peut opérer que sur des scalaires.
Quelle est la différence entre le &
y &&
opérateurs logiques dans MATLAB ?
L'esperluette simple & est l'opérateur logique AND. L'esperluette double && est également un opérateur ET logique qui utilise un comportement de court-circuit. Le court-circuitage signifie simplement que le deuxième opérande (côté droit) n'est évalué que si 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)
Une mise en garde : &
peut fonctionner sur des tableaux mais &&
ne peut opérer que sur des scalaires.
Remarque : après 15 ans de travail quasi quotidien avec Matlab, j'utilise toujours '&' et cela ne m'a jamais posé de problème. Par contre, je connais beaucoup de gens qui sont ennuyés par l'utilisation de '&&' parce qu'ils doivent se rappeler que ce n'est pas universel (oui, je réalise que '&' n'est pas aussi efficace parce qu'il ne court-circuite pas, mais je n'enchaîne jamais mes opérandes, donc les économies sont négligeables).
@neuronet ce n'est pas vraiment une question d'efficacité, c'est plutôt qu'il permet une construction où la première expression garantit une condition sans laquelle la seconde expression peut causer une erreur d'exécution, par ex. d != 0 && 1/d
vs d !=0 & 1/d
- la première garantit l'absence de division par zéro, la seconde non.
&&
y ||
prennent des entrées scalaires et court-circuitent toujours. |
y &
prennent des entrées de tableau et ne court-circuitent que dans les instructions if/while. Pour l'affectation, ces dernières ne court-circuitent pas.
Voir ces pages de doc pour plus d'informations.
Avez-vous des informations sur les versions de Matlab dans lesquelles le raccourci &
y |
dans les instructions if/while ? Cela ne semble pas être le cas dans R2012b et R2014a.
@Loren une idée pourquoi ils en ont conçu un pour travailler uniquement avec des scalaires ? Cela semble étrange...
Comme déjà mentionné par d'autres, &
es un opérateur logique ET y &&
es un opérateur de court-circuit ET . Ils diffèrent par la manière dont les opérandes sont évalués ainsi que le fait qu'ils opèrent ou non sur des tableaux ou des scalaires :
&
(opérateur AND) et |
(opérateur OR) peut opérer sur tableaux en fonction des éléments.&&
y ||
sont des versions de court-circuit pour lesquelles le second opérande n'est évalué que lorsque le résultat n'est pas entièrement déterminé par le premier opérande. Celles-ci ne peuvent fonctionner que sur scalaires et non des tableaux.Ces deux opérations sont des opérations logiques ET. Cependant, le && est un opérateur de "court-circuit". Extrait de la documentation de MATLAB :
Ce sont des opérateurs de court-circuit dans la mesure où ils évaluent leur second opérande uniquement lorsque le résultat n'est pas entièrement déterminé par le premier opérande.
Voir plus aquí .
&
est un opérateur logique par éléments, tandis que &&
est un opérateur logique de court-circuitage (qui ne peut opérer que sur des scalaires).
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 seule valeur booléenne.
x = (b ~= 0) && (a/b > 18.5)
J'espère que c'est clair.
Eh bien, cette question a obtenu ~115k vues jusqu'à présent, ce qui signifie que beaucoup de gens ont lu des informations erronées ici. Beaucoup de ces réponses sont incomplètes ou contiennent des informations erronées. Tout ce que vous avez à faire est de corriger votre réponse ou de la supprimer. BTW : bitand
est l'opérateur logique ET par bit dans MATLAB.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.