Quelle est la différence entre int, Int16, Int32 et Int64?
Quelle est la différence entre int
, System.Int16
, System.Int32
et System.Int64
autres que leurs tailles?
10 réponses
chaque type d'entier a une gamme différente de capacité de stockage
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 L'a déclaré James Sutherland dans sa réponse :
int
etInt32
sont en effet synonymes;int
sera un peu plus d'apparence familière,Int32
rend le 32-bitness plus explicite à ceux la lecture de votre code. Je serais enclin à utiliser int là où j'ai juste besoin 'un entier',Int32
lorsque la taille est importante (code cryptographique, structures) afin que les futurs responsables sachent qu'il est sûr d'agrandir unint
s'il y a lieu, 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 lisibilité ou apparence de code.
la seule vraie différence ici est la taille. Tous les types int ici sont des valeurs entières signées qui ont des tailles variables
-
Int16
: 2 octets -
Int32
etint
: 4 octets -
Int64
: 8 octets
il y a une petite différence entre Int64
et le reste. Sur une plate-forme 32 bits, les assignations à un emplacement de stockage Int64
sont de ne pas être atomique. Il est garanti pour tous les autres types.
int
c'est un type de données primitif défini dans C#.
il est mappé à Int32 de type FCL.
il s'agit d'un type de valeur et d'un système de représentation.Int32 struct.
il est signé et prend 32 bits.
il a le minimum -2147483648 et le maximum +2147483647 valeur.
Int16
C'est un FCL type.
En C#, court est mappé à Int16.
il s'agit d'un type de valeur et d'un système de représentation.Int16 struct.
il est signé et prend 16 bits.
il a minimum -32768 et maximum +32767 valeur.
Int32
C'est un type de FCL.
En C#, int est mappé à Int32.
il s'agit d'un type de valeur et d'un système de représentation.Int32 struct.
il est signé et prend 32 bits.
il a le minimum -2147483648 et le maximum +2147483647 valeur.
Int64
C'est un type de FCL.
En C#, long est mappé à Int64.
il s'agit d'un type de valeur et d'un système de représentation.Int64 struct.
il est signé et prend 64 bits.
il a une valeur minimum -9.223.372.036.854.775.808 et maximum 9.223.372.036.854.775.807.
Selon Jeffrey Richter(un des contributeurs de .NET framework de développement)'livre 'CLR via C#':
int est un type primitif autorisé par le compilateur C#, alors que Int32 est le type de bibliothèque de classe Framework (disponible dans toutes les langues qui respectent CLS). En fait, int se traduit par Int32 lors de la compilation.
aussi,
En C#, le long des cartes de Système.Int64, mais dans un autre programmation langue, long pourrait correspondre à Int16 ou Int32. En fait, C++/CLI n' traiter aussi longtemps que Int32.
en fait, la plupart des langues (.NET) ne seront même pas traitées longtemps comme un mot-clé et ne seront pas compiler le code qui l'utilise.
j'ai vu cet auteur, et beaucoup de littérature standard sur .NET préférant les types FCL(i.e., Int32) aux types primitifs spécifiques au langage(i.e., int), principalement sur de telles préoccupations d'interopérabilité.
note très importante sur les types 16, 32 et 64:
si vous exécutez cette requête... Tableau.Index of (new Int16)[]{1,2,3}, 1)
vous êtes supposé obtenir zéro(0) parce que vous demandez... est 1 dans la gamme de 1, 2 ou 3. si vous obtenez -1 comme réponse, cela signifie que 1 n'est pas dans la gamme 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 de cadre 2.0, 3.0, 3.5, 4.0)
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)
donc mon point est, pour Array.Index of comparisons, only trust Int32!
rien. La seule différence entre les types est leur taille (et, par conséquent, la gamme de valeurs qu'ils peuvent représenter).
-
int
etint32
sont une seule et même (entier 32 bits) -
int16
est short int (2 octets ou 16 bits) -
int64
est le type de données long (8 octets ou 64 bits)
EDIT: ce n'est pas tout à fait vrai pour C#, une balise que j'ai manquée quand j'ai répondu à cette question - s'il y a une réponse plus spécifique C#, s'il vous plaît votez pour cela à la place!
ils représentent tous des nombres entiers de tailles variables.
cependant, il y a une 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 définit seulement un int comme plus grand ou égal à un court, bien que dans la pratique c'est la largeur du processeur que vous visez, qui est probablement 32bit, mais vous devez savoir que ce pourrait ne pas être.
ils sont en effet tous les deux synonymes, mais j'ai trouvé la petite différence entre eux,
1)vous ne pouvez pas utiliser Int32
en créant enum
enum Test : Int32
{ XXX = 1 // gives you compilation error
}
enum Test : int
{ XXX = 1 // Works fine
}
2) Int32
relève de la déclaration du système. si vous supprimez using.System
vous obtiendrez d'erreur de compilation mais pas dans le cas de int
Int=Int32 -- > Original long type
Int16 --> Origine int
Int64 -- > nouveau type de données disponible après 64 systèmes de bits
"int" n'est disponible que pour la compatibilité descendante. Nous devrions vraiment utiliser de nouveaux types int pour rendre nos programmes plus précis.
---------------
une autre chose j'ai remarqué en cours de route est qu'il n'y a pas de classe appelée Int
similaire à Int16, Int32 et Int64. Toutes les fonctions utiles comme TryParse
pour entier viennent Int32.TryParse
.