Podobnie jak operator &
i &&
podwójny operator jest operatorem zwarciowym.
Na przykład:
if(condition1 || condition2 || condition3)
Jeśli warunek 1 jest prawdziwy, warunek 2 i 3 NIE zostaną sprawdzone.
if(condition1 | condition2 | condition3)
Spowoduje to sprawdzenie warunków 2 i 3, nawet jeśli 1 jest już prawdą. Ponieważ twoje warunki mogą być dość drogimi funkcjami, możesz uzyskać dobry wzrost wydajności, korzystając z nich.
Istnieje jedno duże zastrzeżenie, NullReferences lub podobne problemy. Na przykład:
if(class != null && class.someVar < 20)
Jeśli klasa ma wartość NULL, instrukcja if zatrzyma się po wartości class != null
false. Jeśli użyjesz tylko &, spróbuje to sprawdzić, class.someVar
a otrzymasz fajny NullReferenceException
. Z Or-Operatorem może to nie być pułapka, ponieważ jest mało prawdopodobne, aby wyzwolić coś złego, ale należy o tym pamiętać.
Nikt jednak nigdy nie korzysta z pojedynczego operatora &
ani |
operatorów, chyba że masz projekt, w którym każdy warunek jest funkcją, którą MUSI wykonać. Brzmi jak zapach designerski, ale czasami (rzadko) jest to czysty sposób na robienie różnych rzeczy. &
Operator ma „uruchomić te 3 funkcje, a jeśli jeden z nich zwraca false, należy wykonać jeszcze blok”, a |
nie „tylko uruchomić innego bloku, jeśli fałszywe żaden powrót” - mogą być przydatne, ale jak mówi, często jest to projekt zapach.
Istnieje jednak drugie użycie operatora |
i &
: Operacje bitowe .
&
i|
jako operatorów warunkowych jest włamaniem i wpędzi ich w kłopoty, jeśli kiedykolwiek będą potrzebować używać C / C ++:1 && 2
prawda jest prawdą, a1 & 2
fałsz.&
aby przekazać znaczenie inne niż to, co prawie zawsze oznacza: bitowe-i) .|| jest logicznym operatorem OR. Wygląda na to, że właściwie wiesz, co to jest. Jest używany w instrukcjach warunkowych, takich jak if, while itp.
Sprawdza się, czy spełniony jest warunek 1 LUB warunek 2.
| jest bitowym operatorem OR. Służy do obsługi dwóch liczb. Patrzysz na każdy bit każdej liczby osobno, a jeśli jeden z bitów ma wartość 1 w co najmniej jednej z liczb, to bit wynikowy również będzie równy 1. Oto kilka przykładów:
Mam nadzieję, że to ma sens.
Tak więc, aby odpowiedzieć na dwa ostatnie pytania, nie powiedziałbym, że istnieją jakieś zastrzeżenia oprócz „znać różnicę między dwoma operatorami”. Nie są wymienne, ponieważ robią dwie zupełnie różne rzeczy.
źródło
Jeden jest „bitowy lub”.
Drugi to logika lub.
źródło
|
może być stosowany również nabool
typach bez zwarć.Dobre pytanie. Te dwa operatory działają tak samo w PHP i C #.
|
jest nieco bitowe LUB. Porówna dwie wartości według ich bitów. Np. 1101 | 0010 = 1111. Jest to niezwykle przydatne podczas korzystania z opcji bitów. Np. Odczyt = 01 (0X01) Zapis = 10 (0X02) Odczyt-zapis = 11 (0X03). Jednym przydatnym przykładem może być otwieranie plików. Prostym przykładem byłoby:||
jest logicznym OR. W ten sposób większość ludzi myśli o OR i porównuje dwie wartości na podstawie ich prawdy. Np. Idę do sklepu lub pójdę do centrum handlowego. Ten jest najczęściej używany w kodzie. Na przykład:Zasób PHP: http://us3.php.net/language.operators.bitwise
C # Resources: http://msdn.microsoft.com/en-us/library/kxszd0kx(VS.71).aspx
http://msdn.microsoft.com/en-us/library/6373h346(VS.71).aspx
źródło
|
jest logiczne lub stosowane w przypadku wartości logicznych . Jak podaje linkowane odniesienie. W praktyce wynik końcowy jest taki sam, jakby był operatorem bitowym, ponieważ wartości bitowetrue
ifalse
są takie, że bitowa lub ich wartość daje dokładnie taki sam wynik, jak logiczny lub robi. To jest(int)(bool1 | bool2)
==((int)bool1) | ((int)bool2)
.Prosty przykład w java
wynik :
źródło
& - (Warunek 1 i Warunek 2): sprawdza oba przypadki, nawet jeśli pierwszy jest fałszywy
&& - (Warunek 1 i& Warunek 2): nie zawracaj sobie głowy sprawdzaniem drugiego przypadku, jeśli pierwszy jest fałszywy
&& - operator sprawi, że Twój kod będzie działał szybciej, profesjonalnie i jest rzadko używany
| - (Warunek 1 | Warunek 2): sprawdza oba przypadki, nawet jeśli przypadek 1 jest prawdziwy
|| - (Warunek 1 || Warunek 2): nie zawracaj sobie głowy sprawdzaniem drugiego przypadku, jeśli pierwszy jest prawdziwy
|| - operator sprawi, że Twój kod będzie działał szybciej, profesjonalnie | jest rzadko używany
źródło
rarely used
? Wszystko zależy od tego, co chcesz lub musisz zrobić.Pojedyncza rura | jest jednym z operatorów bitowych .
Z Wikipedii:
źródło
Z ich matematycznej definicji, OR i AND są operatorami binarnymi; weryfikują warunki LHS i RHS niezależnie, podobnie jak | i &.
|| i && zmieniają właściwości operatorów OR i AND, zatrzymując je, gdy warunek LHS nie jest spełniony.
źródło
The | operator wykonuje bitową operację OR swoich dwóch operandów (co oznacza, że obie strony muszą ocenić na false, aby zwrócił false), podczas gdy || operator oceni drugiego operatora tylko w razie potrzeby.
http://msdn.microsoft.com/en-us/library/kxszd0kx(VS.71).aspx
http://msdn.microsoft.com/en-us/library/6373h346(VS.71).aspx
źródło
Singe pipe „|” jest „bitowy” lub i powinien być używany tylko wtedy, gdy wiesz, co robisz. Podwójna rura „||” jest logicznym lub i może być użyte w instrukcjach logicznych, takich jak „x == 0 || x == 1”.
Oto przykład tego, co bitowe lub robi: jeśli a = 0101 ib = 0011, to a | b = 0111. Jeśli masz do czynienia z układem logicznym, który traktuje dowolne niezerowe jako prawdziwe, wówczas bitowe lub będzie działało w taki sam sposób, jak logiczne lub, ale jego odpowiednik (bitowe i „&”) NIE. Również bitowa lub nie wykonuje oceny zwarcia.
źródło
bool
typów bez zwarć.Pojedyncza rura (|) jest bitowym operatorem LUB .
Dwie rury (||) to logiczny operator OR.
Nie są wymienne.
źródło