Antworten:
Ich bin ein bisschen verwirrt von der MSDN C # -Dokumentation, die besagt, dass
&
und|
logische Operatoren sind und dass&&
und||
bedingte Operatoren. Ich rufe immer wieder&&
an||
und!
logische Operatoren, also irre ich mich?
Nein; Du hast Recht.
In der MSDN-Dokumentation gibt es zahlreiche kleine, meist unwichtige Nomenklaturfehler. Ich habe versucht, so viele wie möglich herauszuholen, aber in Fällen, in denen es nicht ungeheuerlich falsch und irreführend ist, ist es nicht immer ein kluger Zeiteinsatz. Wechseln Sie zur Spezifikation, wenn Sie eine endgültige Aussage über den Namen eines C # -Features wünschen.
Also: die relevante Autorität ist die C # -Spezifikation, die in Abschnitt 7.11 besagt:
Die
&
,^
und|
Operatoren sind die logischen Operatoren genannt.
Anschließend werden die integrierten logischen Operatoren weiter in ganzzahlige, enumerative, boolesche und nullable-boolesche logische Operatoren unterteilt. Es gibt auch benutzerdefinierte logische Operatoren. Einzelheiten finden Sie in der Spezifikation.
In Abschnitt 7.12 haben wir
Die Operatoren
&&
und||
werden als bedingte logische Operatoren bezeichnet. Sie werden auch als logische Kurzschlussoperatoren bezeichnet.
Alle von ihnen sind logische Operatoren. Einige von ihnen sind bedingte logische Operatoren .
Was macht die bedingten logischen Operatoren bedingt ? Man könnte vermuten, dass dies der Fall ist, weil sie normalerweise in bedingten Anweisungen ( if
) oder bedingten Ausdrücken ( ? :
) verwendet werden. Der wahre Grund ergibt sich aus der Spezifikation:
Die Operatoren
&&
und||
sind bedingte Versionen der Operatoren&
und|
: Die Operationx && y
entspricht der Operationx & y
,y
wird jedoch nur ausgewertet, wenn siex
nicht falsch ist. Die Operationx || y
entspricht der Operationx | y
,y
wird jedoch nur ausgewertet, wenn siex
nicht wahr ist.
Die bedingten logischen Operatoren werden daher benannt, weil der rechte Operand abhängig vom Wert des linken Operanden bedingt ausgewertet wird.
Wir können dies deutlicher sehen, indem wir feststellen, dass die bedingten logischen Operatoren nur "syntaktische Zucker" für bedingte Ausdrücke sind . x && y
ist einfach eine angenehmere Art zu schreiben x ? y : false
und x || y
ist einfach eine angenehmere Art zu schreiben x ? true : y
. Die bedingten logischen Ausdrücke sind tatsächlich bedingte Ausdrücke.
Es gibt auch eine benutzerdefinierte Form des bedingten logischen Operators, die etwas knifflig ist. Einzelheiten finden Sie in der Spezifikation.
Weiterführende Literatur, wenn Sie dieses Thema interessiert:
In C # sind dies alles logische Operatoren.
int x = 0xABCD & 0xFF // x == 0xCD
&&
und ||
werden " bedingte logische Operatoren" genannt, weil sie kurzschließen.
bool someOtherCondition = true;
if (x == 0xEF && someOtherCondition) // someOtherCondition is not evaluated,
// because x == 0xEF is false
Beachten Sie, dass diese Terminologie von Sprache zu Sprache unterschiedlich ist. In C und C ++ &&
und ||
sind nur logische Operatoren. In Java werden &
und |
als bitweise Operatoren bezeichnet , während C und C ++ sie als arithmetische Operatoren klassifizieren .
Der Punkt ist , dass &
und |
sind bitweise Operatoren, dh sie zu und Ertrag Bitkette Werte angewendet werden. Und bitweise ist ein sehr verbreiteter Begriff unter Programmierern.
Zum Beispiel 0xff & 0x00 == 0x00
während 0xff | 0x00 == 0xff
.
Und &&
und ||
werden auf Bedingungen angewendet und ergeben die üblichen Werte von Bedingungen; dh true
und false
.
Zum Beispiel true && false == false
während true || false == true
.
Daher &&
und ||
könnte man bedingte Operatoren nennen, auch wenn dies unter Programmierern kein üblicher Begriff ist.
Das weiß natürlich jeder C-, C ++ -, Java- und C # -Programmierer. Aber ich vermute, dass das Missverständnis passiert, weil "Bedingter Operator" kein Begriff ist, der von uns Programmierern häufig verwendet wird.
|
beispielsweise austauschbar sind||
, obwohl sie in vielen Fällen ohne erkennbare Änderung des Programmverhaltens ausgetauscht werden können.