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?
c#
operators
logical-operator
John V
quelle
quelle
|
beispielsweise austauschbar sind||
, obwohl sie in vielen Fällen ohne erkennbare Änderung des Programmverhaltens ausgetauscht werden können.Antworten:
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:
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
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 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 schreibenx ? y : false
undx || y
ist einfach eine angenehmere Art zu schreibenx ? 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:
quelle
In C # sind dies alles logische Operatoren.
&&
und||
werden " bedingte logische Operatoren" genannt, weil sie kurzschließen.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 .quelle
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ährend0xff | 0x00 == 0xff
.Und
&&
und||
werden auf Bedingungen angewendet und ergeben die üblichen Werte von Bedingungen; dhtrue
undfalse
.Zum Beispiel
true && false == false
währendtrue || 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.
quelle