Réponses:
Je suis un peu confus par la documentation MSDN C # qui déclare que
&
et|
sont des opérateurs logiques et qui&&
et||
sont des opérateurs conditionnels. Je continuer à appeler&&
,||
et les!
opérateurs logiques, donc je me trompe?
Non; vous avez raison.
La documentation MSDN contient de nombreuses erreurs de nomenclature mineures, pour la plupart peu importantes. J'ai essayé d'en faire sortir le plus grand nombre possible, mais dans les cas où ce n'est pas manifestement faux et trompeur, ce n'est pas toujours une utilisation judicieuse du temps. Accédez à la spécification si vous souhaitez une déclaration définitive sur le nom d'une fonctionnalité C #.
Donc: l'autorité compétente est la spécification C #, qui stipule dans la section 7.11:
Le
&
,^
, et les|
opérateurs sont appelés les opérateurs logiques.
Il poursuit ensuite en décomposant davantage les opérateurs logiques intégrés en opérateurs logiques entier, énumération, booléen et nullable-booléen. Il existe également des opérateurs logiques définis par l'utilisateur. voir les spécifications pour plus de détails.
Dans la section 7.12, nous avons
Les opérateurs
&&
et||
sont appelés opérateurs logiques conditionnels. Ils sont également appelés opérateurs logiques «court-circuitant».
Tous sont donc des opérateurs logiques . Certains d'entre eux sont des opérateurs logiques conditionnels .
Qu'est-ce qui rend les opérateurs logiques conditionnels conditionnels ? On pourrait faire une hypothèse spécieuse: c'est parce qu'elles sont généralement utilisées dans des instructions conditionnelles ( if
) ou des expressions conditionnelles ( ? :
). La vraie raison est donnée par le cahier des charges:
Les opérateurs
&&
et||
sont des versions conditionnelles des opérateurs&
et|
: L'opérationx && y
correspond à l'opérationx & y
, sauf qu'elley
n'est évaluée que si ellex
n'est pas fausse. L'opérationx || y
correspond à l'opérationx | y
, sauf quey
n'est évaluée que six
n'est pas vraie.
Les opérateurs logiques conditionnels sont ainsi nommés car l'opérande de droite est évalué de manière conditionnelle en fonction de la valeur de l'opérande de gauche.
Nous pouvons le voir plus clairement en notant que les opérateurs logiques conditionnels ne sont que des "sucres syntaxiques" pour des expressions conditionnelles . x && y
est tout simplement un moyen plus agréable d’écrire x ? y : false
et x || y
un moyen plus agréable d’écrire x ? true : y
. Les expressions logiques conditionnelles sont en réalité des expressions conditionnelles.
Il existe également une forme définie par l'utilisateur de l'opérateur logique conditionnel, et elle est un peu délicate. Voir la spécification pour plus de détails.
Lectures complémentaires, si ce sujet vous intéresse:
En C #, ce sont tous des opérateurs logiques.
int x = 0xABCD & 0xFF // x == 0xCD
&&
et ||
sont appelés " opérateurs logiques conditionnels " parce qu'ils court-circuitent.
bool someOtherCondition = true;
if (x == 0xEF && someOtherCondition) // someOtherCondition is not evaluated,
// because x == 0xEF is false
Notez que cette terminologie diffère d'une langue à l'autre. En C et C ++ &&
et ne ||
sont que des opérateurs logiques. En Java, &
et |
sont appelés Opérateurs de bits , tandis que C et C ++ les classe comme Opérateurs arithmétiques .
Le fait est que &
et |
sont des opérateurs au niveau du bit , ce qui signifie qu’ils sont appliqués à des valeurs de chaîne de bits. Et bitwise est un terme très utilisé par les programmeurs.
Par exemple 0xff & 0x00 == 0x00
, alors que 0xff | 0x00 == 0xff
.
Et &&
et ||
sont appliqués aux conditions et donnent les valeurs habituelles des conditions; c'est à dire true
et false
.
Par exemple true && false == false
, alors que true || false == true
.
Par conséquent &&
, ils ||
pourraient être appelés opérateurs conditionnels , même si ce n’est pas un terme courant chez les programmeurs.
Bien entendu, tous les programmeurs C, C ++, Java et C # savent tout cela. Mais je suppose que l'incompréhension survient parce que "opérateur conditionnel" n'est pas un terme fréquemment utilisé par nos programmeurs.
|
est interchangeable avec||
, même si dans de nombreux cas, ils peuvent être interchangés sans changement apparent du comportement du programme.