2012-04-26 3 views
0

L'étude des conversions C J'ai trouvé un paragraphe sur les promotions entières que je comprends pas très bien, il est dit:A propos des promotions entières

"Integer types smaller than int are promoted when an operation is performed on them. If all values of the original type can be represented as an int, the value of the smaller type is converted to an int; otherwise, it is converted to an unsigned int"

Considérant que:

  1. la le rang de tout type entier non signé est égal au rang du type entier signé correspondant

  2. Le rang de long long int est supérieur au rang de long int, qui est supérieur au rang de int, qui est supérieur au rang de short, qui est supérieur au rang de char signé.

les questions sont: Pourquoi un type plus petit que int ne doit pas être représenté par un int? et pourquoi un entier non signé peut représenter une valeur qu'un int ne devrait pas représenter?

Merci d'avance.

+0

Essayez-vous de comprendre pourquoi quelqu'un préférerait, disons, un court sur un int? – kevin628

Répondre

0

Bien qu'un short a rang inférieure à une int, il pourrait être la même taille(en bits), par exemple sizeof(int) == sizeof(short) == 2 sur les systèmes 16 bits. Donc, un unsigned short peut être capable de contenir une valeur supérieure à INT_MAX.

Pour la deuxième partie de votre question, qui a la même réponse: un unsigned int peut contenir des valeurs qui ne peuvent pas être représentés comme int, à savoir INT_MAX+1 .. UINT_MAX.

+0

Merci beaucoup, maintenant c'est clair – newbie