web-dev-qa-db-fra.com

Quelle est la différence entre & et && dans MATLAB?

Quelle est la différence entre le & et && opérateurs logiques dans MATLAB?

87
Fantomas

L'esperluette unique & est l'opérateur logique AND. Le double esperluette && est à nouveau un opérateur AND logique qui utilise un comportement de court-circuit. Court-circuiter 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)

89
Fraser

&& et || toujours prendre des entrées scalaires et des courts-circuits. | et & prend les entrées de la matrice et court-circuite uniquement dans les instructions if/while. Pour l'affectation, ces derniers ne court-circuitent pas.

Voir ces pages de documentation pour plus d'informations.

32
Loren

Comme déjà mentionné par d'autres, & est un opérateur AND logique et && est un court-circuit ET opérateur . Ils diffèrent par la façon 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) peut utiliser des tableaux de manière élémentaire.
  • && et || sont des versions de court-circuit pour lesquelles le deuxième opérande est évalué uniquement 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 des tableaux.
16
gnovice

Les deux sont des opérations AND logiques. Le && cependant, est un "court-circuit" opérateur. À partir de la documentation MATLAB:

Ce sont des opérateurs de court-circuit en ce sens 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.

Voir plus ici .

8
Mark

Semblable à d'autres langages, & Est un opérateur de bits logique, tandis que && 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.

5
Erik Kerber

&& et || are court-circuit opérateurs opérant sur des scalaires. & et | opère sur les tableaux, et court-circuitez seulement dans le contexte des expressions de boucle if ou while.

4
Dima

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 &&/|| formes, à moins qu'il y ait une très bonne raison de ne pas. Il y a deux raisons ...

  1. Comme d'autres l'ont mentionné, le comportement de &&/|| en matière de court-circuit est similaire à la plupart des langues C-like. Cette similitude/familiarité est généralement considérée comme un point en sa faveur.
  2. Utilisation de && ou || formes oblige vous pour écrire le code complet pour décider de votre intention pour les arguments vectoriels. Quand a = [1 0 0 1] et b = [0 1 0 1], a & b est-il vrai ou faux? Je ne me souviens pas des règles pour MATLAB's &, pouvez-vous? La plupart des gens ne peuvent pas. Par contre, si vous utilisez && ou ||, vous êtes obligé d'écrire le code "en entier" pour résoudre le problème.

Ce faisant, plutôt que de compter sur la résolution des vecteurs de MATLAB dans & and |, le code est un peu plus détaillé, mais BEAUCOUP plus sûr et facile à gérer.

2
Bob Gilmore