Opérateurs de débordement d'entier et d'affectation arithmétique en C# : short = short
En C#, lorsque deux short
entiers sont ajoutés, le résultat sera un type int
avec une plage de valeurs plus large que short
. Un débordement d'entier se produit si la somme de deux short
entiers dépasse la valeur maximale de short
.
Considérez le code suivant :
<code class="language-csharp">short a, b; a = 10; b = 10; a = a + b; // 错误:无法隐式转换类型“int”为“short”。</code>
Ici, le résultat de l'opération d'addition de a
et b
est de type int
, et le compilateur ne peut pas le convertir implicitement en type short
. En effet, l'attribution de int
à short
sans conversion explicite entraîne une perte de données.
Cependant, le code suivant ne produit pas d'erreur :
<code class="language-csharp">a += b; // 但这段代码可以成功运行,为什么?</code>
C'est parce que C# gère l'opérateur d'affectation arithmétique =
différemment. Lors de l'utilisation de =
, le compilateur effectue en interne les opérations suivantes :
<code class="language-csharp">a = (short)(a + b);</code>
Le compilateur convertira automatiquement le résultat de l'opération d'addition en type a
avant d'attribuer le résultat à short
. Cela garantit que la valeur est correctement stockée dans la variable int
même si le résultat intermédiaire est de type short
.
Ce comportement est similaire à d'autres opérateurs d'affectation composés, tels que -=
, *=
et /=
, qui convertissent automatiquement le résultat en type de l'opérande de gauche.
Ainsi, l'opérateur d'affectation arithmétique short
peut être utilisé en toute sécurité sur les variables =
même si la somme dépasse la plage de short
. Le compilateur gère la conversion de type en interne pour éviter les erreurs de dépassement d'entier.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!