2009-12-16 36 views
32

¿Cuál es la diferencia real entre un long y un int en C#? Entiendo que en C/C++ de largo sería de 64 bits en algunas plataformas de 64 bits (dependiendo del sistema operativo por supuesto), pero en C# todo se está ejecutando en el tiempo de ejecución de .NET, por lo que hay una distinción real?¿Diferencia entre long e int en C#?

Otra pregunta: ¿puede un int tener un long (por molde) sin perder datos en todas las plataformas?

+0

Además de las respuestas, tenga en cuenta que long e int tienen constantes estáticas MaxValue y MinValue. –

+1

Lo sabía, pero no estaba seguro de si esto cambiaba dependiendo de las plataformas de 32 bits y 64 bits. Buscar en Google arrojó muchos resultados en C/C++. – Earlz

+0

La plataforma está abstraída en .NET, por lo que obtener siempre un tiempo de ejecución consistente (para el código administrado, al menos) – thecoop

Respuesta

59

un int (aka System.Int32 dentro del tiempo de ejecución) es siempre un poco entero con signo de 32 en cualquier plataforma, un long (aka System.Int64) siempre es un poco entero con signo de 64 en cualquier plataforma. Por lo tanto, no puede convertir desde long con un valor superior a Int32.MaxValue o inferior a Int32.MinValue sin perder datos.

+0

ok. pero ¿por qué esta página https://msdn.microsoft.com/en-us/library/296az74e.aspx muestra el mismo número de MAX INT y MAX LONG ?? un error en la página de Microsoft? – Vetras

+1

Esos son tipos de C++, no C# – thecoop

+0

La primera página cuando google 'C# long max value' es esta página - https://msdn.microsoft.com/en-us/library/296az74e.aspx - que NO es para C# . Eso parece por qué el OP hizo la pregunta. – K48

8

int es de 32 bits en .NET. long es de 64 bits. Eso está garantizado Entonces, no, un int no puede aguantar mucho sin perder datos.

Hay un tipo cuyo tamaño cambia según la plataforma en la que se ejecuta, que es IntPtr (y UIntPtr). Esto podría ser de 32 bits o 64 bits.

4

Claro que es una diferencia: en C#, un largo es un entero de 64 bits con signo, un entero es un entero de 32 bits con signo, y así es como siempre lo será siempre.

Así que en C#, un largo puede contener un int, pero un int no puede contener un largo.

C/C++ esa pregunta depende de la plataforma.

4

En C#, un int es un System.Int32 y un long es un System.Int64; el primero es de 32 bits y el posterior de 64 bits.

C++ solo proporciona garantías vagas sobre el tamaño de int/long, en comparación (puede profundizar en el estándar de C++ para detalles exactos y sangrientos).

0

Creo que un int es un entero de 32 bits, mientras que un entero es un entero de 64 bits.

15

int en C# => System.Int32 => de -2,147,483,648 a 2,147,483,647.

larga en C# => System.Int64 => desde -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807

Si los datos a largo excede el rango de enteros, y se utiliza Convert.ToInt32 entonces tirará OverflowException, si utiliza conversión explícita entonces el resultado sería inesperado.

Cuestiones relacionadas