code:C++ Arithmétique type de conversion avec des entiers non signés et signés
#include<iostream>
using std::cout; using std::endl;
int main()
{
unsigned int i = 5;
int x = -3;
cout << "(i + x) = " << (i + x) << endl;
cout << "Set x to -6" << endl;
x = -6;
cout << "(i + x) = " << (i + x) << endl;
}
Sortie:
(i + x) = 2
Set x to -6
(i + x) = 4294967295
Dans cet exemple, le type du résultat retourné par (i + x) est un entier non signé, cependant, je pensais qu'avec les conversions de type arithmétique, l'entier signé (la variable "x" dans ce cas) est supposé être "promu" en un entier non signé avant que les opérations aient lieu. Cela ne doit pas être le cas puisque le premier résultat de (i + x) serait (5 + (2^31 - 1 - 3)) = 4294967297 et non 2. Y a-t-il quelque chose qui me manque ici? Il me semble que seul le résultat final est converti en un entier non signé, et non les opérandes initiaux.
Numéros non signés [wrap modulo] (http://stackoverflow.com/a/22801135/1708801) –