Question

j'ai toujours utilisé || (deux tubes) dans les expressions OR, à la fois en C# et PHP.Parfois, je vois un seul tuyau utilisé : |.Quelle est la différence entre ces deux usages ?Y a-t-il des mises en garde lors de l’utilisation de l’un sur l’autre ou sont-ils interchangeables ?

Était-ce utile?

La solution

Tout comme le & et && opérateur, l'Opérateur double est un opérateur "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à vraie.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 grande mise en garde, NullReferences ou problèmes similaires.Par exemple:

if(class != null && class.someVar < 20)

Si la classe est nulle, l'instruction if s'arrêtera après class != null c'est faux.Si vous utilisez uniquement &, il essaiera de vérifier class.someVar et tu auras une belle NullReferenceException.Avec l'opérateur Or, 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 | opérateurs cependant, 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 les choses.Le & L'opérateur "exécute ces 3 fonctions, et si l'une d'elles renvoie false, exécute le bloc else", tandis que l'opérateur | "n'exécute le bloc else que si aucun ne renvoie false" - peut être utile, mais comme dit, c'est souvent une odeur de conception.

Il existe une deuxième utilisation du | et & opérateur cependant: Opérations au niveau du bit.

Autres conseils

|| est le logique ou l'opérateur.On dirait que vous savez fondamentalement ce que c'est.Il est utilisé dans les instructions conditionnelles telles que if, while, etc.

condition1 || condition2

Prend la valeur true si la condition1 OU la condition2 est vraie.

| est l'opérateur bitwise ou.Il sert à opérer sur deux nombres.Vous regardez chaque bit de chaque nombre individuellement et, si l'un des bits est 1 dans au moins un des nombres, alors le bit résultant sera également 1.Voici quelques exemples:

A = 01010101
B = 10101010
A | B = 11111111

A = 00000001
B = 00010000
A | B = 00010001

A = 10001011
B = 00101100

A | B = 10101111

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 en plus de "connaître la différence entre les deux opérateurs". Ils ne sont pas interchangeables parce qu'ils font deux choses complètement différentes.

L'un est un "ou au niveau du bit".

10011B | 01000b => 11011b

L'autre est une logique ou.

vrai ou faux => vrai

Bonne question.Ces deux opérateurs fonctionnent de la même manière en PHP et C#.

| est un bitwise ou.Il comparera deux valeurs par leurs bits.Par exemple.1101 | 0010 = 1111.Ceci est extrêmement utile lors de l’utilisation d’options de bits.Par exemple.Lecture = 01 (0X01) Écriture = 10 (0X02) Lecture-écriture = 11 (0X03).Un exemple utile serait l’ouverture de fichiers.Un exemple simple serait :

File.Open(FileAccess.Read | FileAccess.Write);  //Gives read/write access to the file

|| est un logique ou.C'est ainsi que la plupart des gens pensent à OR et comparent deux valeurs en fonction de leur vérité.Par exemple.Je vais au magasin ou j'irai au centre commercial.C'est celui qui est le plus souvent utilisé dans le code.Par exemple.

if(Name == "Admin" || Name == "Developer) { //allow access } //checks if name equals Admin OR Name equals Developer

Ressource PHP : http://us3.php.net/langue.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

Exemple simple en Java

public class Driver {

  static int x;
  static int y;

public static void main(String[] args) 
throws Exception {

System.out.println("using double pipe");
    if(setX() || setY())
        {System.out.println("x = "+x);
        System.out.println("y = "+y);
        }



System.out.println("using single pipe");
if(setX() | setY())
    {System.out.println("x = "+x);
    System.out.println("y = "+y);
    }

}

 static boolean setX(){
      x=5;
     return true;
  }
 static boolean setY(){
      y=5;
      return true;
  }
}

sortir :

using double pipe
x = 5
y = 0
using single pipe
x = 5
y = 5

& - (Condition 1 et Condition 2) :vérifie les deux cas même si le premier est faux

&& - (Condition 1 && Condition 2) :Ne vous embêtez pas à vérifier le deuxième cas si le cas est faux

&& - l'opérateur rendra votre code exécuté plus rapidement, de manière professionnelle 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 donnez pas la peine de vérifier le deuxième cas si le premier est vrai

|| - L'opérateur rendra votre code plus rapidement, professionnellement | est rarement utilisé

Le tube unique, |, est l'un des au niveau du bit les opérateurs.

De Wikipédia :

Dans la famille des langues de programmation C, l'opérateur ou l'opérateur est "|" (tuyau).Encore une fois, cet opérateur ne doit pas être confondu avec son booléen "logique ou" homologue, qui traite ses opérandes comme des valeurs booléennes, et est écrit "||" (deux tuyaux).

De par leur définition mathématique, OR et AND sont des opérateurs binaires ;Ils vérifient les conditions LHS et RHS malgré tout, de la même manière que | et &.

|| et && modifier les propriétés des opérateurs OR et et en les arrêtant lorsque la condition LHS n'est pas remplie.

Le | L'opérateur effectue un peu ou de ses deux opérandes (ce qui signifie que les deux côtés doivent évaluer à False pour qu'il revienne faux) tandis que le || 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

Le tuyau de Singe "|" est le "bitwise" ou et ne doit être utilisé que lorsque vous savez ce que vous faites.Le double tuyau "||" est un logique ou, et peut être utilisé dans des instructions logiques, comme "x == 0 || x == 1".

Voici un exemple de ce que fait le bitwise or :si a=0101 et b=0011, alors a|b=0111.Si vous avez affaire à un système logique qui traite tout non nul comme vrai, alors le ou au niveau du bit agira de la même manière que le ou logique, mais son homologue (au niveau du bit et "&") ne le fera PAS.Également au niveau du bit ou n'effectue pas d'évaluation de court-circuit.

Un seul tuyau (|) est le opérateur OU au niveau du bit.

Deux tubes (||) sont l'opérateur logique OU.

Ils ne sont pas interchangeables.

|| (deux tuyaux) est généralement un logique ou pendant que | (un tuyau) est un binaire ou.De mémoire, je ne peux penser à aucun moment où la différence serait un gros piège (autre que lorsque vous attribuez le résultat à autre chose).Cependant, je suis sûr que quelqu'un d'autre se trouvera dans une situation où cela compte.

Modifier:Wow, six autres réponses dans le temps qu'il m'a fallu pour écrire ceci.

Au niveau du bit (|) vs.logique(||) !Pensez à la logique comme aux objets comparables en Java, en comparant certaines "parties" distinctes pendant que l'opérateur au niveau du bit regarde ces objets et au lieu de voir s'ils sont visuellement jumeaux (comme le fait la logique), fait un échantillon d'ADN et regarde les 0 et les 1. plutôt.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top