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
Linda Hamiltonoriginal
2024-11-29 14:24:10536parcourir

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;
  • 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;
  • 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!

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