wake-up-neo.com

Unterschied zwischen | und || oder & und && zum Vergleich

Mögliches Duplikat:
Eine klare Erklärung des Laien für den Unterschied zwischen | und || in c #?

Was ist der Unterschied zwischen Vergleichen mit | und || oder & und && in C # und Javascript?

Beispiele:

if(test == test1 | test1 == test2) or if(test == test1 || test1 == test2)
if(test == test1 & test1 == test2) or if(test == test1 && test1 == test2)
37
Josh Mein

in C (und wahrscheinlich in anderen Sprachen) ein einziges | oder & ist ein bitweiser Vergleich.
Der Doppelgänger || oder && ist ein logischer Vergleich.
Bearbeiten: Lies unbedingt den Kommentar von Mehrdad zu "ohne Kurzschluss" weiter unten

In der Praxis entspricht true häufig 1 und false entsprechen häufig 0, die bitweisen Vergleiche können manchmal gültig sein und genau das gleiche Ergebnis zurückgeben.

Es gab einmal eine unternehmenskritische Softwarekomponente, auf der ich einen statischen Code-Analysator ausführte, und es wurde darauf hingewiesen, dass ein bitweiser Vergleich verwendet wurde, bei dem ein logischer Vergleich hätte durchgeführt werden müssen. Da es in C und aufgrund der Anordnung der logischen Vergleiche geschrieben wurde, funktionierte die Software mit beiden gut. Beispiel:

if ( (altitide > 10000) & (knots > 100) )
...
32
dustmachine

& und | sind bitweise Operatoren, die sowohl Ganzzahl- als auch Boolesche Argumente und && und || verarbeiten können sind logische Operatoren, die nur mit Booleschen Argumenten arbeiten können. Wenn beide Argumente in vielen Sprachen Boolesch sind, besteht der Hauptunterschied darin, dass die logischen Operatoren eine Kurzschlussbewertung durchführen und das zweite Argument nicht bewerten, wenn das erste Argument ausreicht, um die Antwort zu bestimmen (z. B. im Fall von &&, wenn das erste Argument ist falsch, das zweite Argument ist irrelevant).

29
Richard Dunlap

& und | sind binäre Operatoren während || und && sind boolesche Werte.

Der große Unterschied:
(1 & 2) ist 0, falsch
(1 && 2) ist wahr

8
David

(Angenommen, C, C++, Java, JavaScript)

| und & sind bitweise Operatoren, während || und && sind logische Operatoren. Normalerweise möchten Sie || und && für if-Anweisungen und Schleifen und dergleichen (d. h. für Ihre obigen Beispiele). Die bitweisen Operatoren dienen zum Setzen und Prüfen von Bits in Bitmasken.

3
Graeme Perrow

Die Instanz, in der Sie ein einzelnes Zeichen (d. H. | Oder) verwenden, ist ein bitweiser Vergleich der Ergebnisse. Solange Ihre Sprache diese Ausdrücke als Binärwert auswertet, sollten sie dieselben Ergebnisse zurückgeben. Als Best Practice sollten Sie jedoch den logischen Operator verwenden, da Sie das meinen (glaube ich).

1
Zac
1
Crispy

Das & und | sind in der Regel bitweise Operationen.

Wo als && und || sind in der Regel logische Operationen.

Zu Vergleichszwecken ist es vollkommen in Ordnung, vorausgesetzt, dass alles entweder eine 1 oder eine 0 zurückgibt. Andernfalls kann es falsche Positive zurückgeben. Sie sollten dies jedoch vermeiden, um schwer lesbare Fehler zu vermeiden.

0
Daniel