Maison > développement back-end > C++ > Pourquoi « short = short » fonctionne-t-il en C# alors que « short = short short » ne fonctionne pas ?

Pourquoi « short = short » fonctionne-t-il en C# alors que « short = short short » ne fonctionne pas ?

Mary-Kate Olsen
Libérer: 2025-01-23 08:52:10
original
955 Les gens l'ont consulté

Why Does `short  = short` Work in C# While `short = short   short` Doesn't?

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal