Integer-Überlauf und arithmetische Zuweisungsoperatoren in C#: short = short
Wenn in C# zwei short
-Ganzzahlen hinzugefügt werden, ist das Ergebnis ein int
-Typ mit einem größeren Wertebereich als short
. Ein Ganzzahlüberlauf tritt auf, wenn die Summe zweier short
-Ganzzahlen den Maximalwert von short
überschreitet.
Bedenken Sie den folgenden Code:
<code class="language-csharp">short a, b; a = 10; b = 10; a = a + b; // 错误:无法隐式转换类型“int”为“short”。</code>
Hier ist das Ergebnis der Additionsoperation von a
und b
vom Typ int
und der Compiler kann es nicht implizit in den Typ short
konvertieren. Dies liegt daran, dass die Zuweisung von int
zu short
ohne explizite Konvertierung zu Datenverlust führt.
Der folgende Code erzeugt jedoch keinen Fehler:
<code class="language-csharp">a += b; // 但这段代码可以成功运行,为什么?</code>
Das liegt daran, dass C# den arithmetischen Zuweisungsoperator =
anders behandelt. Bei Verwendung von =
führt der Compiler intern Folgendes aus:
<code class="language-csharp">a = (short)(a + b);</code>
Der Compiler konvertiert das Ergebnis der Additionsoperation automatisch in den Typ a
, bevor er das Ergebnis short
zuweist. Dadurch wird sichergestellt, dass der Wert auch dann korrekt in der Variablen int
gespeichert wird, wenn das Zwischenergebnis vom Typ short
ist.
Dieses Verhalten ähnelt anderen zusammengesetzten Zuweisungsoperatoren wie -=
, *=
und /=
, die das Ergebnis automatisch in den Typ des linken Operanden umwandeln.
Daher kann der arithmetische Zuweisungsoperator short
sicher auf =
-Variablen angewendet werden, selbst wenn die Summe den Bereich von short
überschreitet. Der Compiler übernimmt die Typkonvertierung intern, um Ganzzahlüberlauffehler zu vermeiden.
Das obige ist der detaillierte Inhalt vonWarum funktioniert „short = short' in C#, während „short = short short' nicht funktioniert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!