Odpowiedzi:
Jestem nieco zdezorientowany dokumentacji MSDN C #, który stanowi, że
&
i|
są operatory logiczne i że&&
i||
są operatory warunkowe. Ciągle dzwoni&&
,||
a!
operatory logiczne, więc nie mam racji?
Nie; masz rację.
W dokumentacji MSDN występuje wiele małych, głównie nieistotnych błędów w nomenklaturze; Próbowałem wydobyć ich jak najwięcej, ale w przypadkach, w których nie jest to rażąco złe i wprowadzające w błąd, nie zawsze mądrze jest wykorzystać czas. Przejdź do specyfikacji, jeśli chcesz definitywne oświadczenie o nazwie funkcji C #.
Tak więc: właściwym organem jest specyfikacja C #, która stwierdza w sekcji 7.11:
Operatory
&
,^
i|
nazywane są operatorami logicznymi.
Następnie przechodzi do dalszego podziału wbudowanych operatorów logicznych na liczby całkowite, wyliczenie, logiczne i nullable-logiczne operatory. Istnieją również operatory logiczne zdefiniowane przez użytkownika; szczegóły w specyfikacji
W sekcji 7.12 mamy
Te
&&
i||
operatorzy są nazywane warunkowe operatorów logicznych. Są one również nazywane operatorami logicznymi „zwierającymi”.
Wszystkie są więc operatorami logicznymi . Niektóre z nich to warunkowe operatory logiczne .
Co powoduje, że warunkowe operatory logiczne są warunkowe ? Można by podejrzewać, że dzieje się tak, ponieważ są one zwykle używane w instrukcjach warunkowych ( if
) lub wyrażeniach warunkowych ( ? :
). Prawdziwy powód podano w specyfikacji:
&&
I||
operatorzy są wersje warunkowego&
i|
operatorzy: Operacjax && y
odpowiada operacjix & y
, oprócz tego, żey
jest oceniana tylko wtedy, gdyx
nie jest fałszywy. Operacjax || y
odpowiada operacjix | y
, z tym żey
jest oceniana tylko wtedy, gdyx
nie jest prawdziwa.
W ten sposób nazywane są warunkowe operatory logiczne, ponieważ prawy operand jest oceniany warunkowo w zależności od wartości lewego operandu.
Widzimy to bardziej żywo, zauważając, że operatory logiczne warunkowe są po prostu „cukrami składniowymi” dla wyrażeń warunkowych . x && y
jest po prostu przyjemniejszym sposobem pisania x ? y : false
i x || y
jest po prostu przyjemniejszym sposobem pisania x ? true : y
. Warunkowe wyrażenia logiczne są w rzeczywistości wyrażeniami warunkowymi.
Istnieje również zdefiniowana przez użytkownika postać warunkowego operatora logicznego i jest to trochę trudne. Szczegółowe informacje można znaleźć w specyfikacji.
Dalsza lektura, jeśli ten temat Cię interesuje:
W języku C # są to wszystkie operatory logiczne.
int x = 0xABCD & 0xFF // x == 0xCD
&&
i ||
nazywane są „ warunkowymi operatorami logicznymi”, ponieważ powodują zwarcie.
bool someOtherCondition = true;
if (x == 0xEF && someOtherCondition) // someOtherCondition is not evaluated,
// because x == 0xEF is false
Pamiętaj, że ta terminologia różni się w zależności od języka. W C i C ++ &&
, a ||
to tylko Operatory logiczne. W Javie, &
i |
nazywane są bitowe operatora , natomiast C i C ++ klasyfikuje je jako operatory arytmetyczne .
Chodzi o to, że &
i |
są logicznie operatorów, co oznacza, że są stosowane do bitowe wydajność wartości ciągów. Bitowe jest bardzo popularnym terminem wśród programistów.
Na przykład 0xff & 0x00 == 0x00
podczas 0xff | 0x00 == 0xff
.
I &&
i ||
są stosowane w warunkach i dają zwykle wartości warunkach; tj . true
i false
.
Na przykład true && false == false
podczas true || false == true
.
Dlatego &&
i ||
można nazwać warunkowe operatorów, mimo że nie jest to zwykły termin wśród programistów.
Oczywiście każdy programista C, C ++, Java i C # wie o tym wszystkim. Ale chyba źle zrozumiano, ponieważ „operator warunkowy” nie jest terminem często używanym przez nas, programistów.
|
jest wymienna||
, chociaż w wielu przypadkach można je zamieniać bez widocznej zmiany w zachowaniu programu.