Heim >Backend-Entwicklung >C++ >Warum erlaubt C# „short = short', aber nicht „short = short short'?

Warum erlaubt C# „short = short', aber nicht „short = short short'?

DDD
DDDOriginal
2025-01-23 08:42:16694Durchsuche

Why Does C# Allow `short  = short` But Not `short = short   short`?

C# Short Integer Arithmetic: Verständnis von = vs. =

C# zeigt beim Hinzufügen von short Ganzzahlen ein scheinbar widersprüchliches Verhalten. Die direkte Zuweisung (short = short short) schlägt bei der Kompilierung fehl, während die zusammengesetzte Zuweisung (short = short) erfolgreich ist. Dieser Artikel erläutert dieses Verhalten.

Warum short short zu int

führt

Die Summe zweier short-Ganzzahlen wird implizit zu einem int heraufgestuft. Diese Designwahl verhindert mögliche Überlauffehler. Ein Überlauf tritt auf, wenn das Ergebnis einer arithmetischen Operation den durch den Datentyp darstellbaren Maximalwert überschreitet.

Betrachten Sie dieses Beispiel:

<code class="language-csharp">short[] prices = { 10000, 15000, 11000 };
short average = (prices[0] + prices[1] + prices[2]) / 3; // Compile-time error</code>

Ohne implizite Heraufstufung zu int würde der Zusatz überlaufen, was zu einem ungenauen average führen würde.

Die implizite Besetzung des = Operators

Der =-Operator unterscheidet sich von der direkten Zuweisung. Die C#-Sprachspezifikation schreibt vor, dass zusammengesetzte Zuweisungsoperatoren eine implizite Umwandlung in den Typ des linken Operanden durchführen.

Für a = b, wobei a und b short sind, übersetzt der Compiler dies effektiv in:

<code class="language-csharp">a = (short)(a + b);</code>

Diese implizite Umwandlung bewältigt einen potenziellen Überlauf, indem das int-Ergebnis auf ein short zurückgeschnitten wird. Beachten Sie, dass diese Kürzung zu Datenverlust führen kann, wenn die Summe den shortBereich überschreitet.

Zusammenfassung

Die Addition zweier short-Werte ergibt einen int, um einen Überlauf zu vermeiden. Die implizite Umwandlung des =-Operators ermöglicht prägnanten Code und verringert gleichzeitig das Risiko eines Datenverlusts aufgrund eines möglichen Überlaufs während des Vorgangs, eliminiert es jedoch nicht. Dies bietet Flexibilität und ermöglicht Berechnungen, die andernfalls zu Kompilierungsfehlern führen würden.

Das obige ist der detaillierte Inhalt vonWarum erlaubt C# „short = short', aber nicht „short = short short'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn