Maison > développement back-end > C++ > Comment les conversions arithmétiques habituelles déterminent-elles le type de résultat des opérateurs binaires \' \' avec des opérandes signés et non signés ?

Comment les conversions arithmétiques habituelles déterminent-elles le type de résultat des opérateurs binaires \' \' avec des opérandes signés et non signés ?

DDD
Libérer: 2024-12-01 18:15:12
original
225 Les gens l'ont consulté

How Do Usual Arithmetic Conversions Determine the Result Type of Binary

Règles de promotion pour les opérateurs binaires signés et non signés

Considérez les extraits de code suivants :

// Snippet 1
int max = std::numeric_limits<int>::max();
unsigned int one = 1;
unsigned int result = max + one;
Copier après la connexion
// Snippet 2
unsigned int us = 42;
int neg = -43;
int result = us + neg;
Copier après la connexion

Comment l'opérateur " " détermine-t-il le type de résultat correct dans ces cas, étant donné la signature différente du opérandes ?

L'opérateur suit la règle des « conversions arithmétiques habituelles », qui dicte les étapes de conversion de type en fonction des types d'opérandes. Selon cette règle, si l'un des opérandes est :

  • double long, les deux opérandes sont convertis en double long.
  • double, les deux opérandes sont convertis en double.
  • float, les deux opérandes sont convertis en float.
  • unsigned long, l'autre opérande est converti en non signé long.
  • long int et l'autre opérande unsigned int, les deux opérandes sont convertis en unsigned long int si la valeur de l'int non signé peut être représentée dans un long int ; sinon, les deux sont convertis en long.
  • long, l'autre opérande est converti en long.
  • non signé, l'autre opérande est converti en non signé.

Puisque int et unsigned int sont interchangeables dans la règle, l'opérande avec le type le plus large (unsigned int) est choisi comme résultat type.

Cela explique pourquoi dans l'extrait 1, le résultat est unsigned int (2147483648) et dans l'extrait 2, le résultat est int (-1). L'opérande signé (neg) est implicitement converti en unsigned int, ce qui donne une valeur indéfinie dans ce dernier cas.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal