Tout comme l' opérateur &
et &&
, l'opérateur double est un opérateur de "court-circuit".
Par exemple:
if(condition1 || condition2 || condition3)
Si la condition 1 est vraie, les conditions 2 et 3 ne seront PAS vérifiées.
if(condition1 | condition2 | condition3)
Cela vérifiera les conditions 2 et 3, même si 1 est déjà vrai. Comme vos conditions peuvent être des fonctions assez coûteuses, vous pouvez obtenir une bonne amélioration des performances en les utilisant.
Il y a une grosse mise en garde, NullReferences ou des problèmes similaires. Par exemple:
if(class != null && class.someVar < 20)
Si la classe est null, l'instruction if s'arrêtera après class != null
est false. Si vous utilisez uniquement &, il essaiera de vérifier class.someVar
et vous obtiendrez une belle NullReferenceException
. Avec l'Or-Opérateur, ce n'est peut-être pas vraiment un piège car il est peu probable que vous déclenchiez quelque chose de mauvais, mais c'est quelque chose à garder à l'esprit.
Personne n'utilise jamais le single &
ou les |
opérateurs, sauf si vous avez une conception où chaque condition est une fonction qui DOIT être exécutée. Cela ressemble à une odeur de design, mais parfois (rarement) c'est une façon propre de faire des choses. L' &
opérateur "exécute ces 3 fonctions, et si l'une d'elles retourne false, exécute le bloc else", tandis |
que "n'exécute le bloc else que si aucune ne retourne false" - peut être utile, mais comme dit, souvent c'est une conception odeur.
Il y a une deuxième utilisation des |
et &
opérateur cependant: au niveau du bit opérations .
&
et en|
tant qu'opérateurs conditionnels est un hack, et leur causera des ennuis s'ils ont besoin d'utiliser C / C ++:1 && 2
est vrai tandis que1 & 2
est faux.&
pour transmettre un sens autre que ce qu'il signifie presque toujours: bit à bit et) .|| est l'opérateur logique OU. Il semble que vous sachiez ce que c'est. Il est utilisé dans les instructions conditionnelles telles que if, while, etc.
Évalue à vrai si l'une des conditions1 OU condition2 est vraie.
| est l'opérateur OR au niveau du bit. Il est utilisé pour fonctionner sur deux nombres. Vous examinez chaque bit de chaque nombre individuellement et, si l'un des bits est égal à 1 dans au moins l'un des nombres, le bit résultant sera également égal à 1. Voici quelques exemples:
J'espère que cela a du sens.
Donc, pour répondre aux deux dernières questions, je ne dirais pas qu'il y a des mises en garde à part "connaître la différence entre les deux opérateurs". Ils ne sont pas interchangeables car ils font deux choses complètement différentes.
la source
L'un est un "au niveau du bit ou".
L'autre est une logique ou.
la source
|
peut également être utilisé sur lesbool
types sans court-circuit.Bonne question. Ces deux opérateurs fonctionnent de la même manière en PHP et en C #.
|
est un OU au niveau du bit. Il comparera deux valeurs par leurs bits. Par exemple: 1101 | 0010 = 1111. Ceci est extrêmement utile lors de l'utilisation des options de bits. Par exemple, lecture = 01 (0X01) écriture = 10 (0X02) lecture-écriture = 11 (0X03). Un exemple utile serait d'ouvrir des fichiers. Un exemple simple serait:||
est un OU logique. C'est la façon dont la plupart des gens pensent de la RO et compare deux valeurs en fonction de leur vérité. Par exemple, je vais au magasin ou je vais au centre commercial. C'est celui utilisé le plus souvent dans le code. Par exemple:Ressource PHP: http://us3.php.net/language.operators.bitwise
Ressources C #: http://msdn.microsoft.com/en-us/library/kxszd0kx(VS.71).aspx
http://msdn.microsoft.com/en-us/library/6373h346(VS.71).aspx
la source
|
est une logique ou lorsqu'il est appliqué aux booléens . Comme vos états de référence liés. En pratique, le résultat final est le même que s'il s'agissait d'un opérateur bit à bit, car les valeurs bit à bit detrue
etfalse
sont telles qu'un bit à bit ou à leurs valeurs produit exactement le même résultat qu'un logique ou le fait. C'est(int)(bool1 | bool2)
==((int)bool1) | ((int)bool2)
.Exemple simple en java
production :
la source
& - (Condition 1 & Condition 2): vérifie les deux cas même si le premier est faux
&& - (Condition 1 && Condition 2): ne prenez pas la peine de vérifier le deuxième cas si le premier est faux
&& - l'opérateur fera fonctionner votre code plus rapidement, professionnellement et est rarement utilisé
| - (Condition 1 | Condition 2): vérifie les deux cas même si le cas 1 est vrai
|| - (Condition 1 || Condition 2): ne vous embêtez pas à vérifier le deuxième cas si le premier est vrai
|| - l'opérateur fera fonctionner votre code plus rapidement, professionnellement | est rarement utilisé
la source
rarely used
? Tout dépend de ce que vous voulez ou devez faire.Le tube unique, |, est l'un des opérateurs au niveau du bit .
De Wikipédia:
la source
Par leur définition mathématique, OR et AND sont des opérateurs binaires; ils vérifient les conditions LHS et RHS indépendamment, de la même manière que | et &.
|| et && modifient les propriétés des opérateurs OR et AND en les arrêtant lorsque la condition LHS n'est pas remplie.
la source
Le | L'opérateur exécute un OU au niveau du bit de ses deux opérandes (ce qui signifie que les deux côtés doivent évaluer false pour qu'il renvoie false) tandis que || L'opérateur n'évaluera le deuxième opérateur que s'il en a besoin.
http://msdn.microsoft.com/en-us/library/kxszd0kx(VS.71).aspx
http://msdn.microsoft.com/en-us/library/6373h346(VS.71).aspx
la source
Le singe pipe "|" est le "bit à bit" ou et ne doit être utilisé que lorsque vous savez ce que vous faites. Le double tuyau "||" est un ou logique, et peut être utilisé dans des instructions logiques, comme "x == 0 || x == 1".
Voici un exemple de ce que fait le bit à bit: si a = 0101 et b = 0011, alors a | b = 0111. Si vous traitez avec un système logique qui traite tout non différent de zéro comme vrai, le bitwise ou agira de la même manière que le logique ou, mais son homologue (bitwise et, "&") ne le sera PAS. Également au niveau du bit ou n'effectue pas d'évaluation de court-circuit.
la source
bool
types sans court-circuit.Un seul tube (|) est l' opérateur OR au niveau du bit .
Deux canaux (||) est l'opérateur logique OU.
Ils ne sont pas interchangeables.
la source