Frage

Ich habe es immer verwendet || (zwei Pipes) in OR-Ausdrücken, sowohl in C# als auch in PHP.Gelegentlich sehe ich eine einzelne Pfeife verwendet: |.Was ist der Unterschied zwischen diesen beiden Verwendungen?Gibt es irgendwelche Einschränkungen bei der Verwendung übereinander oder sind sie austauschbar?

War es hilfreich?

Lösung

Genau wie die & Und && Operator, der Double-Operator ist ein „Kurzschluss“-Operator.

Zum Beispiel:

if(condition1 || condition2 || condition3)

Wenn Bedingung1 wahr ist, werden Bedingung 2 und 3 NICHT überprüft.

if(condition1 | condition2 | condition3)

Dadurch werden die Bedingungen 2 und 3 überprüft, auch wenn 1 bereits wahr ist.Da Ihre Bedingungen recht teure Funktionen sein können, können Sie durch deren Verwendung eine gute Leistungssteigerung erzielen.

Es gibt einen großen Vorbehalt: NullReferences oder ähnliche Probleme.Zum Beispiel:

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

Wenn die Klasse null ist, wird die if-Anweisung danach beendet class != null ist falsch.Wenn Sie nur & verwenden, wird versucht, dies zu überprüfen class.someVar und du bekommst ein schönes NullReferenceException.Mit dem Or-Operator ist das vielleicht keine so große Falle, da es unwahrscheinlich ist, dass Sie etwas Schlimmes auslösen, aber es ist etwas, das Sie im Hinterkopf behalten sollten.

Niemand benutzt jemals die Single & oder | Operatoren verwenden, es sei denn, Sie haben ein Design, bei dem jede Bedingung eine Funktion ist, die ausgeführt werden MUSS.Klingt nach Design, aber manchmal (selten) ist es eine saubere Art, Dinge zu erledigen.Der & Der Operator führt „diese drei Funktionen aus, und wenn eine von ihnen false zurückgibt, führen Sie den else-Block aus“, während der | „Führt den else-Block nur aus, wenn keiner false zurückgibt“ – kann nützlich sein, aber wie gesagt, es ist oft ein Designgeruch.

Es gibt eine zweite Verwendung des | Und & Betreiber allerdings: Bitweise Operationen.

Andere Tipps

|| ist der logische oder operator.Es hört sich so an, als wüssten Sie im Grunde, was das ist.Es wird in bedingten Anweisungen wie if, while usw. verwendet.

condition1 || condition2

Wird als wahr ausgewertet, wenn entweder Bedingung1 ODER Bedingung2 wahr ist.

| ist der Bitweise oder Operator.Es wird verwendet, um mit zwei Zahlen zu operieren.Sie betrachten jedes Bit jeder Zahl einzeln und wenn eines der Bits in mindestens einer der Zahlen 1 ist, ist das resultierende Bit ebenfalls 1.Hier ein paar Beispiele:

A = 01010101
B = 10101010
A | B = 11111111

A = 00000001
B = 00010000
A | B = 00010001

A = 10001011
B = 00101100

A | B = 10101111

Hoffentlich macht das Sinn.

Um die letzten beiden Fragen zu beantworten, würde ich nicht sagen, dass es irgendwelche Vorbehalte gibt, außer "den Unterschied zwischen den beiden Operatoren" kennen. Sie sind nicht austauschbar, weil sie zwei völlig unterschiedliche Dinge tun.

Eine davon ist ein „bitweises Oder“.

10011b | 01000b => 11011b

Das andere ist eine Logik oder.

wahr oder falsch => wahr

Gute Frage.Diese beiden Operatoren funktionieren in PHP und C# gleich.

| ist bitweise oder.Es vergleicht zwei Werte anhand ihrer Bits.Z.B.1101 | 0010 = 1111.Dies ist äußerst nützlich, wenn Sie Bitoptionen verwenden.Z.B.Lesen = 01 (0X01) Schreiben = 10 (0X02) Lesen-Schreiben = 11 (0X03).Ein nützliches Beispiel wäre das Öffnen von Dateien.Ein einfaches Beispiel wäre:

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

|| ist ein logisches oder.Auf diese Weise stellen sich die meisten Menschen OR vor und vergleichen zwei Werte auf der Grundlage ihrer Wahrheit.Z.B.Ich gehe in den Laden oder ins Einkaufszentrum.Dies ist diejenige, die im Code am häufigsten verwendet wird.Z.B.

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

PHP-Ressource: http://us3.php.net/sprache.operators.bitwise

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

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

Einfaches Beispiel in 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;
  }
}

Ausgabe :

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

& - (Bedingung 1 & Bedingung 2):prüft beide Fälle, auch wenn der erste Fall falsch ist

&& - (Bedingung 1 && Bedingung 2):Die Mühe machen sich nicht die Mühe, den zweiten Fall zu überprüfen, wenn ein Fall falsch ist

&& – Der Operator sorgt dafür, dass Ihr Code schneller und professioneller ausgeführt wird und wird selten verwendet

| - (Bedingung 1 | Bedingung 2):prüft beide Fälle, auch wenn Fall 1 wahr ist

|| - (Bedingung 1 || Zustand 2):Die Mühe machen sich nicht die Mühe, den zweiten Fall zu überprüfen, wenn der erste wahr ist

|| - Der Betreiber macht Ihren Code schneller, professionell | wird selten verwendet

Das einzelne Rohr | ist eines davon bitweise Betreiber.

Aus Wikipedia:

In der C -Programmiersprache der C -Programmiersprache ist der Bitweise oder der Bediener "|". (Rohr).Auch dieser Betreiber darf nicht mit seinem Booleschen "logischen oder" Gegenstück "verwechselt werden, der seine Operanden als booleale Werte behandelt und" || "geschrieben ist. (zwei Rohre).

Ihrer mathematischen Definition nach sind OR und AND binäre Operatoren;Sie überprüfen die LHS- und RHS -Bedingungen unabhängig davon, ähnlich wie | Und &.

|| und && ändern die Eigenschaften des OR und und und die Bediener, indem Sie sie stoppen, wenn die LHS -Bedingung nicht erfüllt ist.

Das | Der Bediener führt eine bitweise oder von seinen beiden Operanden aus (dh beide Seiten müssen zu False bewertet werden, damit er false zurückgibt), während das || Der Bediener bewertet nur den zweiten Bediener, wenn er muss.

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

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

Die Single Pipe "|" ist das "bitweise" oder und sollte nur verwendet werden, wenn Sie wissen, was Sie tun.Die Doppelpfeife "||" ist ein logisches oder und kann in logischen Anweisungen verwendet werden, wie "x == 0 || x == 1".

Hier ist ein Beispiel dafür, was das bitweise Or bewirkt:wenn a=0101 und b=0011, dann a|b=0111.Wenn Sie es mit einem Logiksystem zu tun haben, das alle Nicht-Null-Werte als wahr behandelt, verhält sich das bitweise Oder genauso wie das logische Oder, sein Gegenstück (bitweises Und, „&“) jedoch NICHT.Auch die bitweise bzw. Kurzschlussauswertung wird nicht durchgeführt.

Eine einzelne Pipe (|) ist die bitweiser ODER-Operator.

Zwei Pipes (||) sind der logische ODER-Operator.

Sie sind nicht austauschbar.

|| (zwei Rohre) ist normalerweise a logisch oder während | (ein Rohr) ist a binär oder.Auf den ersten Blick kann ich mir keinen Zeitpunkt vorstellen, an dem der Unterschied ein großes Problem darstellen würde (außer wenn man das Ergebnis etwas anderem zuordnet).Ich bin jedoch sicher, dass jemand anderes eine Situation haben wird, in der es darauf ankommt.

Bearbeiten:Wow, sechs weitere Antworten in der Zeit, die ich zum Schreiben benötigt habe.

Bitweise (|) vs.logisch(||)!Stellen Sie sich logisch als die vergleichbaren Objekte in Java vor, die einige unterscheidbare „Teile“ vergleichen, während der bitweise Operator diese Objekte betrachtet und anstatt zu sehen, ob sie visuelle Zwillinge sind (wie es bei logisch der Fall ist), eine DNA-Probe durchführt und die Nullen und Einsen betrachtet stattdessen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top