web-dev-qa-db-fra.com

unsigned short vs unsigned int - parfois la même plage?

Quelle est la différence entre unsigned short et unsigned int? J'ai trouvé que unsigned short est 0-65,535 et unsigned int est 0-65,535 ou 0-4,294,967,295. Je ne comprends pas très bien la différence. Comment connaître la taille du type de données dans mon architecture? Et si, par exemple, c = (unsigned short) d; lorsque c est un unsigned short et que d est un unsigned int; Qu'est-ce que ça veut dire? les 16 premiers bits de d sont affectés à c?

9
mpluse

Vous vous demandez vraiment quelle est la différence entre short et int. La réponse est que short peut être plus étroit, mais peut avoir la même largeur que, int. C'est pratiquement tout ce que nous savons avec certitude, indépendamment de la plateforme. De nombreuses plates-formes ont des noms int 32 bits et short 32 bits, mais pas tous.

6
John Zwinck

C'est un lien utile pour expliquer l'historique des types de données C:

http://en.wikipedia.org/wiki/C_data_types

Ainsi, la taille de votre type de données dépend de la plate-forme, mais si votre int a une longueur de 32 bits, il pourra alors représenter l'un des 2 ^ 32 numéros différents (0 - 4 294 967 295 si non signé). De même, si votre court-métrage a une longueur de 16 bits, il peut représenter l'un des 2 ^ 16 numéros différents (0 - 65 535 si non signé).

Ce lien vous donne les détails d'implémentation de Visual Studio 2005, où les ints ont une taille de 32 bits (4 octets) et les courts métrages sont de 16 bits (2 octets):

http://msdn.Microsoft.com/en-us/library/s3f49ktz(v=vs.80).aspx

Votre implémentation exacte dépendra de votre compilateur.

Pour ce qui est de la dernière partie de votre question, oui si vous essayez de convertir un int plus court que la valeur maximale du short en un court-circuit, vous obtiendrez une valeur différente (probablement les 16 premiers bits, mais vous devez tester pour être sûr) .

1
gavinj500

Nous ne pouvons pas dire qu'un nom de type de variable (court, int, long, double, etc.) doit indiquer une longueur de bit spécifique dans toutes les architectures de microprocesseurs ou langages de programmation. Cela dépend principalement de l'architecture des microprocesseurs et bien sûr des définitions des langages de programmation. En règle générale, short signé/non signé devrait avoir (je l’attendrais) une demi-taille de bit de signé/non signé. 

0
ceremcem