Maison >développement back-end >C++ >Pourquoi C# autorise-t-il « short = short » mais pas « short = short short » ?

Pourquoi C# autorise-t-il « short = short » mais pas « short = short short » ?

DDD
DDDoriginal
2025-01-23 08:42:16713parcourir

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

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn