Sind Operanden innerhalb eines Ausdrucks zu größeren Typen nach folgenden Regeln gefördert?
-
28-09-2019 - |
Frage
Wenn numerischer Ausdruck enthält Operanden (Konstanten und Variablen) verschiedenen numerischer Typen, sind Operanden, um größere Arten gefördert nach folgenden Regeln:
- , wenn die Operanden der Typen
byte
,sbyte
,char
,short
,ushort
, sie zuint
Typ konvertiert werden - Wenn einer der Operanden ist
int
, dann werden alle Operanden zuint
umgewandelt werden - , wenn Ausdruck auch Operanden der Typen
uint
undint
enthält, dann werden alle Operanden umgewandeltlong
- Wenn einer der Operanden ist
long
, dann werden alle Operanden zulong
umgewandelt werden - wenn Ausdruck Operanden vom Typ
ulong
undlong
enthält, dann Operanden werden zufloat
umgewandelt - Wenn einer der Operanden ist
float
, dann werden alle Operanden zufloat
umgewandelt werden - , wenn einer der Operanden ist
double
, dann werden alle Operanden zudouble
umgewandelt werden
Unter der Annahme, numerischen Ausdrücke enthält Operanden verschiedenen Typen, werden alle Operanden zunächst auf einen einzigen numerischen Typen konvertiert werden, und erst dann wird die Laufzeit versucht das Ergebnis zu berechnen? Wenn zum Beispiel Variablen b1
und b2
von byte
Typ ist, während i1
von int
-Typ ist, wird b1
und b2 get
umgewandelt vor der Berechnung (b1+b2)
int:
int i2=(b1+b2)+i1
Lösung
Die Klammern sind von höherer Priorität als +
, so dass die Umwandlung normalerweise stattfinden würde nach b1
und b2
hinzugefügt wurden. Doch die +
Betreiber hat keine Überlastung byte
s, so müssen die byte
s zuerst int
s gefördert werden.
Lesen Sie auch:
Andere Tipps
haben Ihre Regeln einige Elemente der Wahrheiten, aber technisch ungenau.
Hier sind die relevanten Auszüge aus dem C # Language Specification
7.2.6.2 Binary numerische Aktionen
Binary numerische Förderung erfolgt für die Operanden der vordefinierten
+
,–
,*
,/
,%
,&
,|
,^
,==
,!=
,>
,<
,>=
und<=
Binäroperatoren. Binäre numerische Förderung konvertiert implizit beiden Operanden in einen gemeinsamen Typ, die im Fall der Nicht-relationalen Operatoren, auch den Ergebnistyp des Betriebes wird. Binäre numerische Förderung besteht aus den folgenden Regeln Anwendung, in der Reihenfolge erscheinen sie hier:
- Wenn einer der Operanden vom Typ
decimal
sind, wird der andere Operand konvertiertdecimal
zu geben, oder ein Fehler bei der Kompilierung tritt auf, wenn der andere Operand vom Typfloat
oderdouble
ist.- Wenn einer der beiden Operanden vom Typ
double
ist, wird der andere Operand konvertiertdouble
zu geben.- Wenn einer der beiden Operanden vom Typ
float
ist, wird der andere Operand konvertiertfloat
zu geben.- Wenn einer der beiden Operanden vom Typ
ulong
sind, wird der andere Operand konvertiertulong
zu geben, oder ein Fehler bei der Kompilierung tritt auf, wenn der andere Operand vom Typsbyte
,short
,int
oderlong
.- Wenn einer der beiden Operanden vom Typ
long
ist, wird der andere Operand konvertiertlong
zu geben.- Wenn einer der beiden Operanden vom Typ
uint
ist und der andere Operand vom Typsbyte
,short
oderint
, beide Operanden Typlong
umgewandelt werden.- Wenn einer der beiden Operanden vom Typ
uint
ist, wird der andere Operand konvertiertuint
zu geben.- Andernfalls werden beide Operanden Typ
int
umgewandelt.
int i2=(b1+b2)+i1
Gemäß der obigen Beschreibung, ja, byte b1, b2
unterliegt binäre Zahlen Förderung int
für den binären Operator +
.