Quelle est la différence entre le | et || ou les opérateurs?

j'ai toujours utilisé || (deux pipes) dans ou des expressions, à la fois en C# et en 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 lorsqu'on utilise l'un par rapport à l'autre ou sont-ils interchangeables?

248
demandé sur Rory O'Kane 2008-08-30 01:11:17

13 réponses

tout comme l'opérateur & et && , 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)

ceci vérifiera les conditions 2 et 3, même si 1 est déjà vrai. Comme vos conditions peuvent être des fonctions très coûteuses, vous pouvez obtenir un bon boost de performance en les utilisant.

il y a une grande mise en garde, des références nulles ou des 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 est fausse. Si vous utilisez seulement&, il va essayer de vérifier class.someVar et vous obtenez un nice 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 | les opérateurs, sauf si vous avez une conception où chaque état est une fonction qui doit être exécutée. On dirait 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 le | n'exécute le bloc else que si aucune ne retourne false" - peut être utile, mais comme dit, c'est souvent une odeur de design.

Il y est une deuxième utilisation de l'opérateur | et & bien que: opérations Bitwise .

412
répondu Michael Stum 2018-01-03 03:35:10

|| est l'opérateur logique OU. Il semble que vous connaissez ce que c'est. Il est utilisé dans les énoncés conditionnels tels que si, while,etc.

condition1 || condition2

évalue à true si l'une ou l'autre des conditions 1 ou 2 est vraie.

| est l'opérateur de bits or. Il est utilisé pour opérer sur deux numéros. Vous regardez chaque bit de chaque numéro de individuellement et, si l'un des bits est 1 dans au moins un des numéros, puis le bit résultant sera de 1 également. 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 c'est logique.

donc pour répondre aux deux dernières questions, Je ne dirais pas qu'il y a des mises en garde d'ailleurs" 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.

67
répondu Evan Shaw 2011-04-29 03:42:22

est un "ou binaire".

10011b / 01000b => 11011b

l'autre est une logique ou.

vrai ou faux = > vrai

27
répondu nsanders 2018-08-21 11:19:48

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

| est un bit à bit OU. Il comparera deux valeurs par leurs bits. Par exemple: 1101 / 0010 = 1111. Ceci est extrêmement utile lorsque vous utilisez des options de bits. E. g. Lire = 01 (0X01) Écrire = 10 (0X02) Lire-Écrire = 11 (0X03). Un exemple utile serait d'ouvrir des fichiers. Un exemple simple serait:

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

|| est un OU logique. C'est la façon dont la plupart des gens pensent ou et compare deux valeurs basées sur leur vérité. Par exemple: Je vais au magasin ou je vais au centre commercial. C'est celui utilisé le plus souvent en 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/language.operators.bitwise

C# Ressources: http://msdn.microsoft.com/en-us/library/kxszd0kx(SV.71).aspx

http://msdn.microsoft.com/en-us/library/6373h346 (VS.71).aspx

10
répondu Trevor Abell 2010-11-17 13:38:00

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;
  }
}

sortie:

using double pipe
x = 5
y = 0
using single pipe
x = 5
y = 5
4
répondu vishesh 2012-03-23 08:02:48

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

&& - (Condition 1 Et Condition 2): ne marche pas pris la peine de vérifier second cas, si un cas est faux

&& - opérateur fera de votre code de s'exécuter 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 pas prendre la peine de vérifier le second cas si le premier l'un est vrai

|| - opérateur permet de rendre votre code de courir plus vite, de façon professionnelle | est rarement utilisé

1
répondu Bhai Saab 2017-11-14 03:58:55

le tuyau simple, |, est l'un des opérateurs bitwise .

De Wikipedia:

dans la famille de langage de programmation C, le bitwise ou opérateur est " | " (pipe). Encore une fois, cet opérateur ne doit pas être confondu avec son équivalent booléen "logical or", qui traite ses opérandes comme des valeurs booléennes, et est écrit "||" (deux pipes).

0
répondu codeLes 2008-08-29 21:26:59

par leur définition mathématique, ou et et sont des opérateurs binaires; ils vérifient les conditions LHS et RHS indépendamment, de la même manière que | et &.

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

0
répondu Dragos Bandur 2016-09-24 14:44:43

l'opérateur | exécute un bitwise ou 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 second 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

-1
répondu homeskillet 2008-08-29 21:15:23

Le singe pipe "|" est le "bit à bit" ou et doit être utilisé uniquement lorsque vous savez ce que vous faites. Le double tube " | | "est un ou logique, et peut être utilisé dans des instructions logiques, comme"x == 0 / / x == 1".

voici un exemple de ce que le bitwise ou fait: si a=0101 et b=0011, alors a|b=0111. Si vous avez affaire à un système logique qui traite n'importe quel non-zéro comme vrai, alors le bitwise ou agira de la même manière que le logical or, mais c'est la contrepartie (bitwise et, "&") ne sera PAS. Aussi le bitwise ou n'effectue pas d'évaluation de court-circuit.

-1
répondu Kyle Cronin 2008-08-29 21:15:51

un tuyau simple (|) est le bitwise ou l'opérateur .

Deux pipes (||) est l'opérateur logique OU.

Ils ne sont pas interchangeables.

-2
répondu Dane 2008-08-29 21:16:42

| / (deux pipes) est habituellement un logique ou tandis que / (une pipe) est un binaire ou. Hors du dessus de ma tête, Je ne peux pas penser à n'importe quel moment la différence serait un grand gotcha (autre que lorsque vous assignez le résultat à quelque chose d'autre). Cependant je suis sûr que quelqu'un d'autre aura une situation où il le faut.

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

-2
répondu David Locke 2008-08-29 21:16:54

bit-à-Bit (|) vs logique(||)! Pensez à logique comme les objets comparables en Java, en comparant quelques "pièces" distinguables tandis que l'opérateur bitwise regarde ces objets et au lieu de voir s'ils sont visuellement jumeaux (comme le fait logique), fait un échantillon D'ADN et regarde les 0 et les 1 à la place.

-2
répondu mduvall 2009-07-16 08:12:50