Genau wie die &
und &&
Betreiber ist der Doppel Operator ein „Kurzschluss“ Operator.
Zum Beispiel:
if(condition1 || condition2 || condition3)
Wenn Bedingung1 erfüllt 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 sehr teure Funktionen sein können, können Sie mit ihnen einen guten Leistungsschub erzielen.
Es gibt eine große Einschränkung, NullReferences oder ähnliche Probleme. Zum Beispiel:
if(class != null && class.someVar < 20)
Wenn class null ist, stoppt die if-Anweisung, nachdem class != null
false festgelegt wurde. Wenn Sie nur & verwenden, wird es versuchen zu überprüfen class.someVar
und Sie erhalten eine schöne NullReferenceException
. Mit dem Or-Operator ist das vielleicht keine so große Falle, da es unwahrscheinlich ist, dass Sie etwas Schlechtes auslösen, aber es ist etwas, das Sie beachten sollten.
Niemand verwendet jedoch jemals die Einzel- &
oder |
Operatoren, es sei denn, Sie haben ein Design, bei dem jede Bedingung eine Funktion ist, die ausgeführt werden muss. Klingt nach einem Designgeruch, ist aber manchmal (selten) eine saubere Art, Dinge zu tun. Der &
Operator führt "diese 3 Funktionen aus, und wenn eine von ihnen false zurückgibt, führen Sie den else-Block aus", während der Operator "den else-Block |
nur ausführt, wenn keiner false zurückgibt " - nützlich sein kann, aber wie gesagt, oft handelt es sich um ein Design Geruch.
Es gibt jedoch eine zweite Verwendung des Operators |
und &
: Bitweise Operationen .
&
und|
als bedingte Operatoren ist ein Hack und bringt sie in Schwierigkeiten, wenn sie jemals C / C ++ verwenden müssen:1 && 2
ist wahr, während1 & 2
es falsch ist.&
, um eine andere Bedeutung zu vermitteln als die, die es fast immer bedeutet: bitweise und) .|| ist der logische ODER-Operator. Es hört sich so an, als ob Sie im Grunde wissen, was das ist. Es wird in bedingten Anweisungen wie if, while usw. verwendet.
Wird als wahr ausgewertet, wenn entweder Bedingung1 oder Bedingung2 wahr ist.
| ist der bitweise ODER-Operator. Es wird verwendet, um mit zwei Zahlen zu arbeiten. 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 einige Beispiele:
Hoffentlich macht das Sinn.
Um die letzten beiden Fragen zu beantworten, würde ich nicht sagen, dass es neben "den Unterschied zwischen den beiden Operatoren kennen" keine Einschränkungen gibt. Sie sind nicht austauschbar, weil sie zwei völlig verschiedene Dinge tun.
quelle
Einer ist ein "bitweises oder".
Der andere ist eine Logik oder.
quelle
|
kann auch beibool
Typen ohne Kurzschluss verwendet werden.Gute Frage. Diese beiden Operatoren arbeiten in PHP und C # gleich.
|
ist ein bitweises ODER. Es werden zwei Werte anhand ihrer Bits verglichen. ZB 1101 | 0010 = 1111. Dies ist äußerst nützlich, wenn Bitoptionen verwendet werden. ZB 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:||
ist ein logisches ODER. Auf diese Weise denken die meisten Menschen über OP und vergleichen zwei Werte anhand ihrer Wahrheit. ZB gehe ich in den Laden oder ich gehe ins Einkaufszentrum. Dies ist diejenige, die am häufigsten im Code verwendet wird. Zum Beispiel:PHP-Ressource: http://us3.php.net/language.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
quelle
|
ist eine logische oder , wenn angewendet booleans . Wie Ihre verknüpfte Referenz angibt. In der Praxis ist das Endergebnis dasselbe, als wäre es ein bitweiser Operator, da die bitweisen Werte vontrue
und sofalse
sind, dass ein bitweises oder eines ihrer Werte genau das gleiche Ergebnis wie ein logisches oder ein logisches Ergebnis liefert. Das ist(int)(bool1 | bool2)
==((int)bool1) | ((int)bool2)
.Einfaches Beispiel in Java
Ausgabe :
quelle
& - (Bedingung 1 & Bedingung 2): Überprüft beide Fälle, auch wenn der erste falsch ist
&& - (Bedingung 1 && Bedingung 2): Machen Sie sich nicht die Mühe, den zweiten Fall zu überprüfen, wenn der erste Fall falsch ist
&& - Operator lässt Ihren Code schneller und professioneller laufen und wird selten verwendet
| - (Bedingung 1 | Bedingung 2): Überprüft beide Fälle, auch wenn Fall 1 wahr ist
|| - (Bedingung 1 || Bedingung 2): Machen Sie sich nicht die Mühe, den zweiten Fall zu überprüfen, wenn der erste wahr ist
|| - Der Operator sorgt dafür, dass Ihr Code schneller und professioneller ausgeführt wird wird selten verwendet
quelle
rarely used
? Alles hängt davon ab, was Sie tun möchten oder müssen.Das einzelne Rohr | ist eines der bitweisen Operatoren.
Aus Wikipedia:
quelle
Nach ihrer mathematischen Definition sind OR und AND binäre Operatoren. Sie überprüfen die LHS- und RHS-Bedingungen unabhängig davon, ähnlich wie | und &.
|| und && ändern Sie die Eigenschaften der Operatoren OR und AND, indem Sie sie stoppen, wenn die LHS-Bedingung nicht erfüllt ist.
quelle
Die | Der Operator führt ein bitweises ODER seiner beiden Operanden aus (dh beide Seiten müssen als falsch ausgewertet werden, damit er false zurückgibt), während der || Der Operator wertet den zweiten Operator nur aus, wenn dies erforderlich ist.
http://msdn.microsoft.com/en-us/library/kxszd0kx(VS.71).aspx
http://msdn.microsoft.com/en-us/library/6373h346(VS.71).aspx
quelle
Das Einzelrohr "|" 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 wie "x == 0 || x == 1" verwendet werden.
Hier ist ein Beispiel dafür, was das bitweise oder tut: Wenn a = 0101 und b = 0011, dann ist a | b = 0111. Wenn Sie es mit einem Logiksystem zu tun haben, das eine Nicht-Null als wahr behandelt, verhält sich das bitweise oder genauso wie das logische oder, aber das Gegenstück (bitweise und "&") NICHT. Auch die bitweise oder führt keine Kurzschlussauswertung durch.
quelle
bool
Typen ohne Kurzschluss verwendet werden.Eine einzelne Pipe (|) ist der bitweise ODER-Operator .
Zwei Pipes (||) sind der logische ODER-Operator.
Sie sind nicht austauschbar.
quelle