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
?
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.
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) .
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é.