Quelle est la différence entre int
, System.Int16
, System.Int32
et d' System.Int64
autres que leurs tailles?
229
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 l'a déclaré James Sutherland dans sa réponse :
int
etInt32
sont en effet synonymes;int
sera un peu plus familier,Int32
rend les 32 bits plus explicites pour ceux qui lisent votre code. Je serais enclin à utiliser int où j'ai juste besoin d'un `` entier '',Int32
où la taille est importante (code cryptographique, structures) afin que les futurs responsables sachent qu'il est sûr d'agrandir unint
si approprié, mais devrait prendre soin de changerInt32
variables de la même manière .Le code résultant sera identique: la différence est purement liée à la lisibilité ou à l'apparence du code.
int16
pour économiser les ressources mémoire, plutôt que de simplement utiliserint
?int
c'est toujoursInt32
, quel que soit le système. Vous pensez peut-être au C ++?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 octetsInt32
etint
: 4 octetsInt64
: 8 octetsIl y a une petite différence entre
Int64
et le reste. Sur une plate-forme 32 bits, les affectations à unInt64
emplacement de stockage ne sont pas garanties atomiques. Il est garanti pour tous les autres types.la source
Int64
dans32 bit Windows Operating System
quels sont alors les questions que je pourrais faire face? Y a-t-il un exemple?int
Il s'agit d'un type de données primitif défini en C #.
Il est mappé sur Int32 de type FCL.
Il s'agit d'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
Il s'agit d'un type FCL.
En C #, short 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 maximale de +32767.
Int32
Il s'agit d'un type FCL.
En C #, int est mappé sur Int32.
Il s'agit d'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
Il s'agit d'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.
la source
Int64
type de données peut être représenté à l' aideL
ou lel
suffixe toutInt16
ouInt32
pas suffixe en C #.Selon Jeffrey Richter (l'un des contributeurs du développement du framework .NET) 'CLR via C #':
int est un type primitif autorisé par le compilateur C #, tandis que Int32 est le type de bibliothèque de classes Framework (disponible dans tous les langages qui respectent CLS). En fait, int se traduit par Int32 lors de la compilation.
Aussi,
J'ai vu cet auteur, et de nombreux ouvrages standard sur .NET préférant les types FCL (c.-à-d., Int32) aux types primitifs spécifiques au langage (c.-à-d., Int), principalement sur ces problèmes d'interopérabilité.
la source
Rien. La seule différence entre les types est leur taille (et, par conséquent, la plage de valeurs qu'ils peuvent représenter).
la source
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é obtenir zéro (0) parce que vous demandez ... est 1 dans le tableau de 1, 2 ou 3. si vous obtenez -1 comme réponse, cela signifie que 1 n'est pas dans le tableau de 1, 2 ou 3 .
Eh bien, vérifiez ce que j'ai trouvé: tout ce qui suit devrait vous donner 0 et non -1 (j'ai testé cela dans toutes les versions de framework 2.0, 3.0, 3.5, 4.0)
C #:
VB.NET:
Donc, mon point est, pour les comparaisons Array.IndexOf, faites uniquement confiance à Int32!
la source
short
pour les adapter au tableau, tandis que le deuxième littéral 1 est laissé comme un ordinaireint
.(int)1
n'est pas considéré comme égal à(short)1
,(short)2
,(short)3
, donc le résultat est -1.Array.IndexOf(new Int16(){1,2,3}, 1S)
Array.IndexOf(new Int32(){1,2,3}, 1I)
Array.IndexOf(new Int64(){1,2,3}, 1L)
tout fonctionne comme prévu.Object[],Object
surcharge. C # élève implicitement leint
à unlong
lorsque cela est nécessaire (et lève également le ashort
à unint
oulong
), mais ne sera pas implicitement abaissé, en utilisant laobject
surcharge à la place. AvecOption Strict On
ouOff
VB n'utilisera la surcharge typée que si les types uniformes sont fournis, sinon il utilise laobject
surcharge.for Array.IndexOf comparisons, only trust Int32!
est fausse. Si vous convertissez l'1
argument final en type de tableau correspondant, il fonctionne comme prévu.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 y a une réponse plus spécifique à C #, veuillez voter pour cela à la place!
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 définit uniquement un int comme plus grand ou égal à un court, bien qu'en pratique c'est la largeur du processeur que vous ciblez, qui est probablement 32 bits mais vous devez savoir que ce pourrait ne pas être.
la source
int
etint32
sont une seule et même chose (entier 32 bits)int16
est un entier court (2 octets ou 16 bits)int64
est le type de données long (8 octets ou 64 bits)la source
int
est un alias pourInt32
et est donc toujours garanti à 32 bits.Ils sont tous les deux synonymes, mais j'ai trouvé la petite différence entre eux,
1) Vous ne pouvez pas utiliser
Int32
lors de la créationenum
2)
Int32
relève de la déclaration système. si vous supprimez,using.System
vous obtiendrez une erreur de compilation, mais pas au cas oùint
la source
Int = Int32 -> Type long d'origine
Int16 -> Original int
Int64 -> Un nouveau type de données devient disponible après les systèmes 64 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 que j'ai remarquée en cours de route est qu'il n'y a pas de classe nommée
Int
similaire à Int16, Int32 et Int64. Toutes les fonctions utiles commeTryParse
pour entier proviennent deInt32.TryParse
.la source