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?

168
demandé sur Wai Ha Lee 2012-03-14 09:55:29

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 et Int32 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 un int s'il y a lieu, mais il faut prendre soin de changer les variables Int32 de la même manière.

Le code résultant sera identique: la différence est purement lisibilité ou apparence de code.

258
répondu Community 2017-05-23 11:33:25

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 et int : 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.

94
répondu JaredPar 2012-03-14 05:58:16

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.

52
répondu Haris 2017-06-13 22:08:26

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

13
répondu Praveen 2013-03-10 18:09:00

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!

8
répondu tno2007 2013-09-10 13:01:08

rien. La seule différence entre les types est leur taille (et, par conséquent, la gamme de valeurs qu'ils peuvent représenter).

7
répondu duskwuff 2012-03-14 05:56:53
  1. int et int32 sont une seule et même (entier 32 bits)
  2. int16 est short int (2 octets ou 16 bits)
  3. int64 est le type de données long (8 octets ou 64 bits)
7
répondu Sunil Kumar B M 2012-03-14 05:59:03

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.

5
répondu deanWombourne 2018-02-08 12:02:46

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

3
répondu this.girish 2017-07-18 21:55:03

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 .

-5
répondu Mahesh 2012-12-19 20:03:16