Quelle est la différence entre int
, System.Int16
, System.Int32
et System.Int64
autre que leur taille?
Chaque type d'entier a une plage de capacité de stockage différente
Type Capacity
Int16 -- (-32,768 to +32,767)
Int32 -- (-2,147,483,648 to +2,147,483,647)
Int64 -- (-9,223,372,036,854,775,808 to +9,223,372,036,854,775,807)
Comme indiqué par James Sutherland dans sa réponse :
int
etInt32
sont en effet synonymes;int
sera un peu plus familier,Int32
rend le bit 32 bits plus explicite pour ceux qui lisent votre code. Je serais enclin à utiliser int où j'ai juste besoin de 'un entier',Int32
où la taille est importante (code cryptographique, structures) afin que les futurs responsables sachent qu'il est prudent d'agrandirint
si nécessaire, mais il faut prendre soin de changer les variablesInt32
de la même manière.Le code résultant sera identique: la différence est purement de lisibilité ou d’apparence de code.
La seule différence réelle ici est la taille. Tous les types int ici sont des valeurs entières signées qui ont des tailles variables
Int16
: 2 octetsInt32
et int
: 4 octetsInt64
: 8 octetsIl y a une petite différence entre Int64
et les autres. Sur une plate-forme 32 bits, les attributions à un emplacement de stockage Int64
ne sont pas forcément atomiques. Il est garanti pour tous les autres types.
int
C'est un type de données primitif défini en C #.
Il est mappé sur Int32 de type FCL.
C'est un type de valeur et représente la structure System.Int32.
Il est signé et prend 32 bits.
Il a une valeur minimale de -2147483648 et maximale de +2147483647.
Int16
C'est un type FCL.
En C #, court est mappé sur Int16.
Il s'agit d'un type de valeur et représente la structure System.Int16.
Il est signé et prend 16 bits.
Il a une valeur minimale de -32768 et une valeur maximale de 32767.
Int32
C'est un type FCL.
En C #, int est mappé sur Int32.
C'est un type de valeur et représente la structure System.Int32.
Il est signé et prend 32 bits.
Il a une valeur minimale de -2147483648 et maximale de +2147483647.
Int64
C'est un type FCL.
En C #, long est mappé sur Int64.
Il s'agit d'un type de valeur et représente la structure System.Int64.
Il est signé et prend 64 bits.
Il a une valeur minimale de -9,223,372,036,854,775,808 et maximale de 9 223 372 036 854 775 807.
Selon Jeffrey Richter (un des contributeurs du livre 'CLR via C #' du développement du .NET Framework):
int est un type primitif autorisé par le compilateur C #, alors que Int32 est le type de bibliothèque de classes Framework (disponible dans les langues respectant CLS). En fait, int se traduit en Int32 lors de la compilation.
Aussi,
En C #, long est mappé sur System.Int64, mais dans un langage de programmation différent, long peut mapper sur Int16 ou Int32. En fait, C++/CLI traite longtemps comme Int32.
En fait, la plupart des langages (.NET) ne traitent même pas le long mot-clé et ne compilent pas le code qui l'utilise.
J'ai vu cet auteur et de nombreux ouvrages classiques sur .NET préférant les types FCL (c'est-à-dire Int32) aux types primitifs spécifiques à une langue (c'est-à-dire int), principalement sur de tels problèmes d'interopérabilité.
Rien. La seule différence entre les types est leur taille (et donc la plage de valeurs qu’ils peuvent représenter).
Une note très importante sur les types 16, 32 et 64:
si vous exécutez cette requête ... Array.IndexOf (new Int16 [] {1,2,3}, 1)
vous êtes supposé avoir zéro (0) parce que vous demandez ... vaut 1 dans le tableau de 1, 2 ou 3. Si vous obtenez -1 comme réponse, cela signifie que 1 ne fait pas partie du tableau de 1, 2 ou 3 .
Regardez ce que j’ai trouvé: Tout ce qui suit devrait vous donner 0 et pas -1 (j’ai testé cela dans toutes les versions 2.0, 3.0, 3.5, 4.0 du framework)
C #:
Array.IndexOf(new Int16[]{1,2,3}, 1) = -1 (not correct)
Array.IndexOf(new Int32[]{1,2,3}, 1) = 0 (correct)
Array.IndexOf(new Int64[]{1,2,3}, 1) = 0 (correct)
VB.NET:
Array.IndexOf(new Int16(){1,2,3}, 1) = -1 (not correct)
Array.IndexOf(new Int32(){1,2,3}, 1) = 0 (correct)
Array.IndexOf(new Int64(){1,2,3}, 1) = -1 (not correct)
Mon point est donc, pour les comparaisons Array.IndexOf, ne faites confiance qu’à Int32!
EDIT: Ce n'est pas tout à fait vrai pour C #, une balise que j'ai manquée lorsque j'ai répondu à cette question - s'il existe une réponse plus spécifique à C #, votez plutôt pour cela!
Ils représentent tous des nombres entiers de tailles variables.
Cependant, il y a une très très petite différence.
int16, int32 et int64 ont tous une taille fixe.
La taille d'un int dépend de l'architecture pour laquelle vous compilez - la spécification C ne définit un int que plus grand ou égal à un court bien qu'en pratique c'est la largeur du processeur que vous ciblez, ce qui est probablement 32bit mais vous devez savoir que ce n'est peut-être pas le cas.
int
et int32
sont identiques (entier 32 bits)int16
est court int (2 octets ou 16 bits)int64
est le type de données long (8 octets ou 64 bits)Ils sont tous les deux synonymes, cependant j'ai trouvé la petite différence entre eux,
1) Vous ne pouvez pas utiliser Int32
lors de la créationenum
enum Test : Int32
{ XXX = 1 // gives you compilation error
}
enum Test : int
{ XXX = 1 // Works fine
}
2) Int32
se trouve sous Déclaration système. si vous supprimez using.System
, vous obtiendrez une erreur de compilation, mais pas dans le cas où int