web-dev-qa-db-fra.com

Quelle est la difference entre "short int" et "int" en C?

Comment short int (ou short) et int différent en C? Ils ont la même taille et la même gamme. Si elles sont essentiellement identiques, à quoi sert-il d'avoir deux types de données?

18
Kanwaljeet Singh

Ils peuvent ont la même taille, mais il est garanti que int est égal ou supérieur à short int.

23
MByD

En théorie/selon le standard C, ils pourraient être de toute taille aussi longue que short <= int.

Dans le monde réel, c'est ainsi que les tailles sont mises en œuvre.

CPU             short   int
8 bit           16      16
16 bit          16      16
32 bit          16      32
64 bit          16      32
19
Lundin

Ne vous fiez jamais à un type de données de taille donnée en C. Vérifiez toujours les limites dans limits.h en cas de doute.

3
Robbie Dee

Projet de norme C99 N1256

Tout ce que nous savons maintenant, c'est que:

2 <= sizeof(short) <= sizeof(int)

5.2.4.2.1 Tailles des types entiers <limits.h> donne les tailles minimales:

1 [...] Leurs valeurs définies pour la mise en œuvre doivent être égales ou supérieures (valeur absolue) à celles indiquées [...]

  • UCHAR_MAX 255 // 2 8 - 1
  • USHRT_MAX 65535 // 2 16 - 1
  • UINT_MAX 65535 // 2 16 - 1
  • ULONG_MAX 4294967295 // 2 32 - 1
  • ULLONG_MAX 18446744073709551615 // 2 64 - 1

6.2.5 Types alors dit:

8 Pour deux types entiers avec la même signature et un rang de conversion entier différent (voir 6.3.1.1), la plage de valeurs du type avec un rang de conversion entier plus petit est un sous-gamme des valeurs de l'autre type.

et 6.3.1.1 Booléen, caractères et nombres entiers} détermine les rangs de conversion relatifs:

1 Chaque type d’entier a un rang de conversion d’entier défini comme suit:

  • Le rang de long long int doit être supérieur au rang de long int, qui doit être supérieur au rang d'int, qui doit être supérieur au rang de short int, qui doit être supérieur au rang du caractère signé.
  • Le rang de tout type entier non signé doit être égal au rang du .__ correspondant. type entier signé, le cas échéant.
  • Pour tous les types entiers T1, T2 et T3, si T1 a un rang supérieur à T2 et T2 a rang supérieur à T3, alors T1 a un rang supérieur à T3

Cela dépend du système. Certains systèmes d'exploitation n'auront pas la même longueur pour les deux types.

1
YoyoS

"Un entier court dans un langage de programmation peut avoir une taille différente Dans un langage ou un processeur différent. Dans certains langages Cette taille est fixe pour toutes les plates-formes, alors que dans d'autres, elle dépend de la machine. Dans certaines langues, ce type de données n’existe pas à All. "

La source

0
Ljdawson

Je travaillais sur le même aujourd'hui. Ma conclusion est que cela dépend de la longueur en mots de l'architecture de la machine sur laquelle votre programme est exécuté. Selon la documentation C99 limits.h.

/* Minimum and maximum values a `signed short int' can hold.  */
#  define SHRT_MIN  (-32768)
#  define SHRT_MAX  32767

/* Maximum value an `unsigned short int' can hold.  (Minimum is 0.)  */
#  define USHRT_MAX 65535

/* Minimum and maximum values a `signed int' can hold.  */
#  define INT_MIN   (-INT_MAX - 1)
#  define INT_MAX   2147483647

/* Maximum value an `unsigned int' can hold.  (Minimum is 0.)  */
#  define UINT_MAX  4294967295U

/* Minimum and maximum values a `signed long int' can hold.  */
#  if __WORDSIZE == 64
#   define LONG_MAX 9223372036854775807L
#  else
#   define LONG_MAX 2147483647L
#  endif
#  define LONG_MIN  (-LONG_MAX - 1L)

/* Maximum value an `unsigned long int' can hold.  (Minimum is 0.)  */
#  if __WORDSIZE == 64
#   define ULONG_MAX    18446744073709551615UL
#  else
#   define ULONG_MAX    4294967295UL
#  endif

Faites-moi savoir si quelqu'un a une meilleure réponse.

0
Mateen Maldar

short et int doivent avoir au moins 16 bits, long, au moins 32 bits et short ne dépasse pas int, qui n'est pas plus long Typiquement court est 16 bits, long 32 bits et int 16 ou 32 bits.

0
Ajitesh Sinha

En réalité, tout dépend du compilateur et du système. Mais la règle de base dit que int ne peut jamais être inférieur à court et ne peut jamais être supérieur à long.

court <= int <= long

0
Bharat Sharma