En C++ opérateurs binaires pour les types intrinsèques, les deux opérandes doivent avoir le même type, sinon, l'un des opérandes se convertissent au type de l'autre opérande basé sur une hiérarchie:C++ conversion de type implicite entre les types intrinsèques
long double
double
float
unsigned long long int
long long int
unsigned long int
long int
unsigned int
int
Ma question est: Pourquoi unsigned T
est dans un niveau supérieur à T
. est-ce juste un choix arbitraire ou il y a quelques avantages à convertir T
en Unsigned T
et non l'inverse.
Mise à jour:
//where `unsigned int` to `int` work better.
int a=-3;
unsigned int b=3;
cout << a+b; /* this will output the right result if b get converted to int,
which is not what really happen.*/
//where `int` to `unsigned int` work better.
int a=3;
unsigned int b=pow(2,20);
cout << a+b; /* this will output the right result if a get converted to unsigned int,
which is fortunately what really happen.*/
Je ne vois pas comment convering T
-Unsigned T
a plus d'avantages que l'inverse.
ce n'est pas vrai, ils peuvent tous deux représenter pow (2,32) -1 valeurs différentes. – AlexDan
@AlexDan bien sûr, c'est pourquoi je faisais référence à des valeurs absolues (et j'ai écrit "je devinerais que la logique ...") – SomeWittyUsername