web-dev-qa-db-fra.com

Différence entre long et int en C #?

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?

40
Earlz

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.MinValuesans perdre de données.

70
thecoop

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.

20
Anton Setiawan

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.

8
Gonzalo

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.

4
Walt W

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

4
Josh

Je pense qu'un int est un entier 32 bits, tandis qu'un long est un entier 64 bits.

0
Doug R