Quelle est la différence réelle entre un long
et un int
en C #? Je comprends qu'en C/C++, la longueur serait de 64 bits sur certaines plates-formes 64 bits (selon le système d'exploitation bien sûr), mais en C #, tout fonctionne dans le runtime .NET, alors y a-t-il une distinction réelle?
Autre question: un int
peut-il contenir un long
(par cast) sans perdre de données sur toutes les plateformes?
un int
(alias System.Int32
dans le runtime) est toujours un entier signé 32 bits sur n'importe quelle plate-forme, un long
(aka System.Int64
) est toujours un entier 64 bits signé sur n'importe quelle plate-forme. Vous ne pouvez donc pas caster à partir d'un long
avec une valeur supérieure à Int32.MaxValue
ou en dessous Int32.MinValue
sans perdre de données.
int en C # => System.Int32 => de -2.147.483.648 à 2.147.483.647.
long en C # => System.Int64 => de -9,223,372,036,854,775,808 à 9,223,372,036,854,775,807
Si vos données longues dépassent la plage de int et que vous utilisez Convert.ToInt32, cela lèvera OverflowException, si vous utilisez une conversion explicite, le résultat serait inattendu.
int
est de 32 bits en .NET. long
est de 64 bits. C'est garanti. Donc, non, un int
ne peut pas tenir longtemps sans perdre de données.
Il existe un type dont la taille change en fonction de la plate-forme sur laquelle vous exécutez, qui est IntPtr
(et UIntPtr). Cela pourrait être 32 bits ou 64 bits.
Bien sûr, c'est une différence - En C #, un long est un entier signé 64 bits, un int est un entier signé 32 bits, et c'est toujours ainsi.
Donc, en C #, un long peut contenir un int, mais un int ne peut pas contenir un long.
C/C++ cette question dépend de la plateforme.
En C #, un int
est un System.Int32
et un long
est un System.Int64
; le premier est de 32 bits et les derniers 64 bits.
C++ ne fournit que de vagues garanties sur la taille de int/long, en comparaison (vous pouvez fouiller dans le standard C++ pour les détails exacts, sanglants).
Je pense qu'un int est un entier 32 bits, tandis qu'un long est un entier 64 bits.