2009-12-16 6 views
32

Quelle est la différence entre un long et un int en C#? Je comprends que dans C/C++ long serait 64bit sur certaines plateformes 64 bits (en fonction de l'OS bien sûr) mais en C# tout est en cours d'exécution dans le runtime .NET, donc y at-il une distinction réelle?Différence entre long et int en C#?

Une autre question: est-ce qu'un int peut contenir un long (par diffusion) sans perdre de données sur toutes les plateformes?

+0

En plus des réponses, notez que long et int ont des constantes MaxValue et MinValue statiques. –

+1

Je le savais, mais je n'étais pas sûr si cela a changé en fonction des plates-formes 32 bits et 64 bits .. La recherche sur google a donné beaucoup de résultats C/C++ .. – Earlz

+0

La plate-forme est abstraite dans .NET, de sorte que vous Toujours obtenir une exécution cohérente (pour le code managé, au moins) – thecoop

Répondre

59

un int (aka System.Int32 au sein de l'environnement d'exécution) est toujours un entier signé de 32 bits sur toute plate-forme, un long (aka System.Int64) est toujours un entier signé de 64 bits sur toute plate-forme. Vous ne pouvez donc pas passer d'un long avec une valeur supérieure à Int32.MaxValue ou au-dessous de Int32.MinValue sans perdre de données.

+0

ok. mais alors pourquoi cette page https://msdn.microsoft.com/en-us/library/296az74e.aspx montre le même nombre de MAX INT et MAX LONG ?? une erreur sur la page Microsoft? – Vetras

+1

Ce sont des types C++, pas C# – thecoop

+0

La première page lorsque vous google 'C# long max value' est cette page - https://msdn.microsoft.com/en-us/library/296az74e.aspx - qui n'est pas pour C# . Cela semble expliquer pourquoi le PO a posé la question. – K48

8

int est 32 bits dans .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 varie en fonction de la plate-forme utilisée, à savoir IntPtr (et UIntPtr). Cela pourrait être 32 bits ou 64 bits.

4

Sure est une différence - En C#, un long est un entier signé de 64 bits, un entier est un entier signé de 32 bits, et c'est ainsi qu'il le sera toujours. Donc en C#, un long peut contenir un int, mais un int ne peut pas tenir longtemps.

C/C++ cette question dépend de la plate-forme.

4

En C#, un int est un System.Int32 et un long est un System.Int64; le premier est de 32 bits et le dernier de 64 bits. En comparaison, C++ ne fournit que des garanties vagues sur la taille de int/long (vous pouvez passer en revue la norme C++ pour les détails exacts).

0

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

15

int dans C# => System.Int32 => de -2 147 483 648 à 2 147 483 647.

longue en C# => System.Int64 => de -9.223.372.036.854.775.808 à 9.223.372.036.854.775.807

Si votre longue données dépasse la gamme de int, et que vous utilisez Convert.ToInt32 alors il va jeter OverflowException, si vous utilisez transtypage explicite alors le résultat serait inattendu.

Questions connexes