¿Cuál es la diferencia entre int, Int16, Int32 e Int64?

¿Cuál es la diferencia entre int , System.Int16 , System.Int32 y System.Int64 aparte de sus tamaños?

Cada tipo de entero tiene un rango diferente de capacidad de almacenamiento

  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) 

Como dijo James Sutherland en su respuesta :

int e Int32 son de hecho sinónimos; int será un poco más familiar, Int32 hace que los 32 bits sean más explícitos para quienes leen tu código. Me inclinaría a usar int donde solo necesito ‘un entero’, Int32 donde el tamaño es importante (código criptográfico, estructuras) para que los futuros mantenedores sepan que es seguro ampliar un int si es apropiado, pero deberían tener cuidado cambiando variables Int32 en de la misma manera.

El código resultante será idéntico: la diferencia es puramente legibilidad o apariencia del código.

La única diferencia real aquí es el tamaño. Todos los tipos int aquí son valores enteros con signo que tienen diferentes tamaños

  • Int16 : 2 bytes
  • Int32 e int : 4 bytes
  • Int64 : 8 bytes

Hay una pequeña diferencia entre Int64 y el rest. En una plataforma de 32 bits no se garantiza que las asignaciones a una ubicación de almacenamiento Int64 sean atómicas. Está garantizado para todos los otros tipos.

En t

Es un tipo de datos primitivo definido en C #.

Está mapeado a Int32 de tipo FCL.

Es un tipo de valor y representa la estructura System.Int32.

Está firmado y toma 32 bits.

Tiene un mínimo de -2147483648 y un valor máximo de +2147483647.

Int16

Es un tipo FCL.

En C #, el short se asigna a Int16.

Es un tipo de valor y representa la estructura System.Int16.

Está firmado y toma 16 bits.

Tiene un valor mínimo de -32768 y un valor máximo de +32767.

Int32

Es un tipo FCL.

En C #, int se asigna a Int32.

Es un tipo de valor y representa la estructura System.Int32.

Está firmado y toma 32 bits.

Tiene un mínimo de -2147483648 y un valor máximo de +2147483647.

Int64

Es un tipo FCL.

En C #, long está asignado a Int64.

Es un tipo de valor y representa la estructura System.Int64.

Está firmado y toma 64 bits.

Tiene un valor mínimo de -9,223,372,036,854,775,808 y un máximo de 9,223,372,036,854,775,807.

Según Jeffrey Richter (uno de los contribuidores del desarrollo del framework .NET), el libro ‘CLR via C #’:

int es un tipo primitivo permitido por el comstackdor de C #, mientras que Int32 es el tipo Biblioteca de clases de Framework (disponible en todos los idiomas que cumplen con CLS). De hecho, int se traduce a Int32 durante la comstackción.

También,

En C #, los mapas largos a System.Int64, pero en un lenguaje de progtwigción diferente, long podría mapearse a Int16 o Int32. De hecho, C ++ / CLI lo trata como Int32.

De hecho, la mayoría de los lenguajes (.NET) ni siquiera tratarán como una palabra clave y no comstackrán código que los use.

He visto este autor, y muchas publicaciones estándar sobre .NET, que prefieren los tipos de FCL (es decir, Int32) a los tipos primitivos específicos del idioma (es decir, int), principalmente en tales cuestiones de interoperabilidad.

Una nota muy importante sobre los tipos 16, 32 y 64:

si ejecuta esta consulta … Array.IndexOf (nuevo Int16 [] {1,2,3}, 1)

se supone que obtienes cero (0) porque estás preguntando … está 1 dentro de la matriz de 1, 2 o 3. si obtienes -1 como respuesta, significa que 1 no está dentro de la matriz de 1, 2 o 3 .

Bueno, mira lo que encontré: todo lo siguiente debería darte 0 y no -1 (lo he probado en todas las versiones de framework 2.0, 3.0, 3.5, 4.0)

DO#:

 Array.IndexOf(new Int16[]{1,2,3}, 1) = -1 (not correct) Array.IndexOf(new Int32[]{1,2,3}, 1) = 0 (correct) Array.IndexOf(new Int64[]{1,2,3}, 1) = 0 (correct) 

VB.NET:

 Array.IndexOf(new Int16(){1,2,3}, 1) = -1 (not correct) Array.IndexOf(new Int32(){1,2,3}, 1) = 0 (correct) Array.IndexOf(new Int64(){1,2,3}, 1) = -1 (not correct) 

Así que mi punto es que, para las comparaciones Array.IndexOf, ¡solo confíe en Int32!

Nada. La única diferencia entre los tipos es su tamaño (y, por lo tanto, el rango de valores que pueden representar).

  1. int e int32 son uno y el mismo (entero de 32 bits)
  2. int16 es short int (2 bytes o 16 bits)
  3. int64 es el tipo de datos largo (8 bytes o 64 bits)

EDITAR: Esto no es completamente cierto para C #, una etiqueta que extrañé cuando respondí esta pregunta: si hay una respuesta más específica de C #, ¡vota por eso!


Todos ellos representan números enteros de diferentes tamaños.

Sin embargo, hay una diferencia muy pequeña.

int16, int32 e int64 tienen un tamaño fijo .

El tamaño de un int depende de la architecture para la que está comstackndo: la especificación C solo define un int como mayor o igual a un corto, aunque en la práctica es el ancho del procesador al que apunta, que probablemente sea de 32 bits, pero debe saber que podría no serlo

Ambos son sinónimos. Sin embargo, encontré la pequeña diferencia entre ellos,

1) No puede usar Int32 mientras crea enum

 enum Test : Int32 { XXX = 1 // gives you comstacktion error } enum Test : int { XXX = 1 // Works fine } 

2) Int32 viene bajo statement del sistema. si elimina using.System obtendrá error de comstackción pero no en caso de int

Int = Int32 -> Tipo largo original

Int16 -> Original int

Int64 -> Nuevo tipo de datos disponible después de sistemas de 64 bits

“int” solo está disponible para compatibilidad con versiones anteriores. Realmente deberíamos usar nuevos tipos de int para que nuestros progtwigs sean más precisos.

—————

Una cosa más que noté en el camino es que no hay una clase llamada Int similar a Int16, Int32 e Int64. Todas las funciones útiles como TryParse para enteros provienen de Int32.TryParse .