Arithmétique des entiers courts C# : comprendre =
vs. =
C# présente un comportement apparemment contradictoire lors de l'ajout de short
entiers. L'affectation directe (short = short short
) échoue à la compilation, tandis que l'affectation composée (short = short
) réussit. Cet article clarifie ce comportement.
Pourquoi short short
Résultats dans int
La somme de deux short
entiers est implicitement promue en int
. Ce choix de conception évite d’éventuelles erreurs de débordement. Un débordement se produit lorsque le résultat d'une opération arithmétique dépasse la valeur maximale représentable par le type de données.
Considérez cet exemple :
<code class="language-csharp">short[] prices = { 10000, 15000, 11000 }; short average = (prices[0] + prices[1] + prices[2]) / 3; // Compile-time error</code>
Sans promotion implicite vers int
, l'ajout déborderait, conduisant à un average
inexact.
Le =
Casting implicite de l'opérateur
L'opérateur =
diffère de l'affectation directe. La spécification du langage C# impose que les opérateurs d'affectation composés effectuent une conversion implicite vers le type de l'opérande de gauche.
Pour a = b
, où a
et b
sont short
, le compilateur traduit effectivement cela par :
<code class="language-csharp">a = (short)(a + b);</code>
Cette conversion implicite gère les débordements potentiels en tronquant le résultat int
en un short
. A noter que cette troncature peut entraîner une perte de données si la somme dépasse la short
plage.
En résumé
L'ajout de deux valeurs short
donne un int
pour éviter le débordement. Le cast implicite de l'opérateur =
permet un code concis tout en atténuant, mais sans éliminer, le risque de perte de données due à un débordement potentiel pendant l'opération. Cela offre une flexibilité, permettant des calculs qui autrement entraîneraient des erreurs de compilation.
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!