Jaka jest różnica między operatorami | i | / or?
Zawsze używałem ||
(dwie rury) w wyrażeniach OR, zarówno w C# jak i PHP. Czasami widzę używaną pojedynczą rurę: |
. Jaka jest różnica między tymi dwoma zastosowaniami? Czy są jakieś zastrzeżenia podczas używania jednego nad drugim lub czy są one wymienne?
12 answers
Podobnie jak operator &
i &&
, Operator podwójny jest operatorem zwarciowym.
Na przykład:
if(condition1 || condition2 || condition3)
Jeśli warunek 1 jest prawdziwy, warunek 2 i 3 nie będą sprawdzane.
if(condition1 | condition2 | condition3)
To sprawdzi Warunki 2 i 3, nawet jeśli 1 jest już prawdą. Ponieważ twoje warunki mogą być dość kosztownymi funkcjami, możesz uzyskać dobry wzrost wydajności, korzystając z nich.
Jest jedno duże zastrzeżenie, NullReferences lub podobne problemy. Na przykład:
if(class != null && class.someVar < 20)
Jeśli klasa jest null, Instrukcja if-zatrzyma się po class != null
jest false. Jeśli używasz tylko&, spróbuje sprawdzić class.someVar
i otrzymasz ładny NullReferenceException
. Z operatorem Or, który może nie być aż tak wielką pułapką, ponieważ jest mało prawdopodobne, że uruchomisz coś złego, ale jest to coś, o czym należy pamiętać.
Nikt nigdy nie używa pojedynczych operatorów &
lub |
, chyba że masz projekt, w którym każdy warunek jest funkcją, która musi zostać wykonana. Brzmi jak zapach designu, ale czasami (rzadko) jest to czysty sposób na robienie rzeczy. Operator &
wykonuje "Uruchom te 3 Funkcje i jeśli jedna z nich zwróci false, wykonaj blok else" , podczas gdy |
wykonuje "tylko Uruchom blok else, jeśli żadna nie zwróci false" - może być przydatny, ale jak już wspomniano, często jest to zapach projektu.
Istnieje drugie użycie operatora |
i &
chociaż: operacje bitowe .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-03 03:35:10
/ / jest operatorem logicznym OR. Wygląda na to, że w zasadzie wiesz, co to jest. Jest używany w wyrażeniach warunkowych, takich jak if, while, itd.
condition1 || condition2
Ocenia na true, jeśli warunek 1 lub warunek 2 jest true.
| jest operatorem bitowym OR. Operuje na dwóch numerach. Patrzymy na każdy bit każdej liczby z osobna i jeśli jeden z bitów ma wartość 1 w co najmniej jednej z liczb, to otrzymany bit będzie również równy 1. Oto kilka przykłady:
A = 01010101
B = 10101010
A | B = 11111111
A = 00000001
B = 00010000
A | B = 00010001
A = 10001011
B = 00101100
A | B = 10101111
Mam nadzieję, że to ma sens.
Więc odpowiadając na dwa ostatnie pytania, nie powiedziałbym, że są jakieś zastrzeżenia poza " poznaj różnicę między dwoma operatorami."Nie są wymienne, ponieważ robią dwie zupełnie różne rzeczy.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-29 03:42:22
Jeden jest "bitowym or".
10011b / 01000b => 11011b
Druga to logika lub.
True or false = > true
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-21 11:19:48
Dobre pytanie. Te dwa operatory działają tak samo w PHP i C#.
|
jest bitowym OR. Porównuje dwie wartości według ich bitów. Np. 1101 / 0010 = 1111. Jest to niezwykle przydatne podczas korzystania z opcji bitowych. Np. Read = 01 (0x01) Write = 10 (0x02) Read-Write=11 (0x03). Jednym z użytecznych przykładów byłoby otwieranie plików. Prostym przykładem może być:
File.Open(FileAccess.Read | FileAccess.Write); //Gives read/write access to the file
||
jest logicznym OR. W ten sposób większość ludzi myśli o OR i porównuje dwie wartości oparte na ich prawdzie. Np. Idę Do sklepu albo do centrum handlowego. Jest to ta używana najczęściej w kodzie. Na przykład:
if(Name == "Admin" || Name == "Developer") { //allow access } //checks if name equals Admin OR Name equals Developer
PHP Resource: 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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-06-12 21:02:42
& - (warunek 1 & warunek 2): sprawdza oba przypadki, nawet jeśli pierwszy jest fałszywy
& & - (warunek 1 && warunek 2): dosen ' t trud to check second case if case one is false
& & - 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): dosen ' t trud to check second case if first one is true
/ / - operator sprawi, że Twój kod będzie działał szybciej, profesjonalnie / jest rzadko używany
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-14 03:58:55
Prosty przykład w Javie
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;
}
}
Wyjście:
using double pipe
x = 5
y = 0
using single pipe
x = 5
y = 5
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-23 08:02:48
Rura pojedyncza,/, jest jednym z operatorów bitowych .
Z Wikipedii:
W rodzinie języków programowania C operatorem bitowym OR jest " / " (pipe). Operator ten nie może być mylony z jego Boolowskim odpowiednikiem "logical or", który traktuje swoje operandy jako wartości boolowskie i jest zapisywany jako "/ / " (dwie rury).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-29 21:26:59
Poprzez swoją matematyczną definicję, or and and są operatorami binarnymi; sprawdzają warunki LHS i RHS niezależnie, podobnie jak / and &.
/ / i & & zmienia właściwości operatorów OR I AND, zatrzymując je, gdy warunek LHS nie jest spełniony.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-24 14:44:43
Dla bitów |
i Logicall ||
Lub
Bitowe &
i logicall &&
To znaczy if( a>b | a==0)
w tym pierwszym lewym a>b
zostanie ocenione, a następnie a==0
zostanie ocenione, a następnie |
zostanie wykonana operacja
But in || if a>b
then if wont check for next RHS
Podobnie dla & I & &
if(A>0 & B>0)
Będzie oceniać LHS, a następnie RHS, a następnie bitowo & ale
W (A>0 && B>0)
if(A>0)
jest false
(LHS) będzie bezpośrednio return false;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-07-18 12:15:33
Operator / wykonuje bitowo lub ze swoich dwóch operandów (co oznacza, że obie strony muszą obliczyć false, aby zwrócił false), podczas gdy operator / / oceni drugi operator tylko wtedy, gdy będzie tego potrzebował.
Http://msdn.microsoft.com/en-us/library/kxszd0kx (VS. 71). aspx
Http://msdn.microsoft.com/en-us/library/6373h346 (VS. 71). aspx
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-29 21:15:23
Piszczałka " / "jest" bitowym " or i powinna być używana tylko wtedy, gdy wiesz, co robisz. Podwójna rura " | | "jest logicznym or i może być używana w wyrażeniach logicznych, takich jak "x == 0 / / x == 1".
Oto przykład tego, co robi bitowe or: Jeśli a=0101 i b=0011, to a|b=0111. Jeśli masz do czynienia z systemem logicznym, który traktuje wszelkie niezerowe jako prawdziwe, to bitowe or będzie działać w taki sam sposób jak logiczne or, ale jego odpowiednik (bitowe and,"&") nie będzie. Również bitowo lub nie wykonuje oceny zwarcia.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-29 21:15:51
Pojedyncza rura (|) jest operatorem bitowym OR.
Two pipes (||) jest operatorem logicznym OR.
Nie są wymienne.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-29 21:16:42