Sie sind nicht das Gleiche. Einer ist bitweises ODER und eins ist logisches ODER.
X || Y, ist ein logisches oder, bedeutet dasselbe wie "X oder Y" und gilt für bool-Werte. Es wird in Bedingungen oder Tests verwendet. X und Y können in diesem Fall durch jeden Ausdruck ersetzt werden, der zu einem Bool ausgewertet wird. Beispiel:
if (File.Exists("List.txt") || x > y) { ..}
Die Klausel wird als wahr ausgewertet, wenn eine der beiden Bedingungen zutrifft. Wenn die erste Bedingung wahr ist (wenn die Datei existiert), braucht die zweite Bedingung nicht und wird nicht ausgewertet.
Das Einzelrohr (|) ist ein bitweises ODER. Um zu wissen, was das bedeutet, müssen Sie verstehen, wie Zahlen im Computer gespeichert sind. Angenommen, Sie haben eine 16-Bit-Menge (Int16), die den Wert 15 enthält. Sie wird tatsächlich als 0x000F (in hex) gespeichert, was in binärem Format gleich 0000 0000 0000 1111 ist. Das bitweise OR nimmt zwei Größen und ODER jedes Paar korrespondierender Bits zusammen, so dass, wenn das Bit in jeder Menge 1 ist, es 1 im Ergebnis ist. Wenn also a = 0101 0101 0101 0101 (was 0x5555 in Hex ergibt) und b = 1010 1010 1010 1010 (was 0xAAAA ist), dann ist a | b = 1111 1111 1111 1111 = 0xFFFF.
Sie können in C# bitweise ORs (single pipe) verwenden, um zu testen, ob mindestens ein bestimmter Bitsatz aktiviert ist. Sie könnten dies tun, wenn Sie zum Beispiel 12 boolesche oder binäre Werte haben, für die Sie testen möchten, und sie sind alle unabhängig. Angenommen, Sie haben eine Studenten-Datenbank. Eine Reihe von unabhängigen booleschen Werten könnte Dinge wie männlich/weiblich, zu Hause/auf dem Campus, aktuell/nicht aktuell, angemeldet/nicht angemeldet usw. sein. Anstatt ein boolesches Feld für jeden dieser Werte zu speichern, könnten Sie speichern nur ein einziges Bit für jeden. Der Mann/Frau sein könnte Bit 1 eingeschrieben/könnte etwas nicht sein 2.
Dann können Sie
if ((bitfield | 0x0001) == 0x0001) { ... }
als Test, um zu sehen, wenn keine Bits eingeschaltet sind, mit Ausnahme des „Student ist männlich "Bit, das ignoriert wird. Hä? Nun, das bitweise OR gibt eine 1 für jedes Bit zurück, das in einer der beiden Zahlen eingeschaltet ist. Wenn das Ergebnis des bitweisen ODER über = 0x0001 ist, bedeutet dies, dass im Bitfeld keine Bits eingeschaltet sind, außer vielleicht das erste Bit (0x0001), aber Sie können nicht sicher sagen, ob das erste Bit eingeschaltet ist, weil es ist maskiert.
Es gibt eine entsprechende & & und &, die logische UND und bitweise UND ist. Sie haben das analoge Verhalten.
können Sie
if ((bitfield & 0x0001) == 0x0001) { ... }
sehen verwenden, wenn das erste Bit auf in einem Bitfeld gedreht wird.
EDIT: Ich kann nicht glauben, dass ich dafür gewählt wurde!
| hat eine andere Bedeutung in C#. Das könnte der Grund sein. – jalf
Es ist mehr überraschend, dass Sie gewählt wurden, da die Antwort für die Frage völlig irrelevant ist ... – Guffa