Maison > développement back-end > C++ > Comment les règles de promotion C gèrent-elles les opérations binaires avec des entiers signés et non signés ?

Comment les règles de promotion C gèrent-elles les opérations binaires avec des entiers signés et non signés ?

Linda Hamilton
Libérer: 2024-11-29 14:24:10
original
593 Les gens l'ont consulté

How Do C   Promotion Rules Handle Binary Operations with Signed and Unsigned Integers?

Règles de promotion avec des opérateurs gérant des entiers signés et non signés

Lorsqu'il s'agit d'opérateurs binaires impliquant des signatures différentes entre leurs opérandes, les règles de promotion décrites dans le standard C entre en jeu. Ces règles déterminent le type résultant de l'opération et la manière dont les opérandes sont convertis.

Plus précisément, les "conversions arithmétiques habituelles" s'appliquent ici (§5/9). Ces conversions sont classées par priorité décroissante :

  1. Double longue (si présente)
  2. Double
  3. Flottant
  4. Promotions intégrales (conversion courte/int /long long à int/long/long long)
  5. Long non signé (si présent)
  6. Long si long int peut représenter toutes les valeurs int non signées, ou unsigned long int sinon
  7. Long (si présent)
  8. Non signé (si présent)

Application de ces règles aux deux scénarios présentés :

Scénario 1 :

int max = std::numeric_limits<int>::max();
unsigned int one = 1;
unsigned int result = max + one;
Copier après la connexion
  • max est signé int, un est non signé int
  • Des promotions intégrales se produisent, ce qui donne max comme int
  • Depuis unsigned int est classé plus haut, le type de résultat est unsigned int
  • Résultat : débordement non signé vers 2147483648

Scénario 2 :

unsigned int us = 42;
int neg = -43;
int result = us + neg;
Copier après la connexion
  • us est unsigned int, neg est signé int
  • Des promotions intégrales se produisent, ce qui nous donne un int non signé, négatif comme int
  • Puisque unsigned int est classé plus haut, le type de résultat est unsigned int
  • Cependant, la valeur de us neg (-1) n'est pas représentable dans int
  • Result : Comportement défini par l'implémentation, renvoyant probablement -1 ou dépendant de la plate-forme

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