¿Cuál es la diferencia entre int, System.Int16, System.Int32y System.Int64aparte de sus tamaños?
                229
            
  
              
        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 :
inty deInt32hecho son sinónimos;intserá un poco más familiar,Int32hace que la 32 bits sea más explícita para aquellos que leen su código. Me inclinaría a usar int donde solo necesito 'un número entero',Int32donde el tamaño es importante (código criptográfico, estructuras) para que los futuros mantenedores sepan que es seguro ampliar y,intsi corresponde, pero que deberían cambiar lasInt32variables de la misma manera .El código resultante será idéntico: la diferencia es puramente legible o la apariencia del código.
int16para ahorrar recursos de memoria, en lugar de simplemente usarloint?intes , independientemente del sistema. ¿Quizás estás pensando en C ++?Int32La única diferencia real aquí es el tamaño. Todos los tipos int aquí son valores enteros con signo que tienen tamaños variables
Int16: 2 bytesInt32yint: 4 bytesInt64: 8 bytesHay una pequeña diferencia entre
Int64y el resto. En una plataforma de 32 bits,Int64no se garantiza que las asignaciones a una ubicación de almacenamiento sean atómicas. Está garantizado para todos los otros tipos.fuente
Int64en32 bit Windows Operating Systementonces ¿cuáles son los problemas que podría enfrentar? ¿Hay algún ejemplo?En t
Es un tipo de datos primitivo definido en C #.
Se asigna 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 máximo de +2147483647.
Int16
Es un tipo de FCL.
En C #, corto se asigna a Int16.
Es un tipo de valor y representa System.Int16 struct.
Está firmado y toma 16 bits.
Tiene un mínimo de -32768 y un valor máximo de +32767.
Int32
Es un tipo de 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 máximo de +2147483647.
Int64
Es un tipo de FCL.
En C #, long se asigna 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 valor máximo de 9,223,372,036,854,775,807.
fuente
Int64el tipo de datos se puede representar usandoLolsufijo mientrasInt16oInt32no tiene sufijo en C #.De acuerdo con Jeffrey Richter (uno de los contribuyentes del desarrollo del framework .NET) 'CLR via C #':
int es un tipo primitivo permitido por el compilador de C #, mientras que Int32 es el tipo Framework Class Library (disponible en todos los lenguajes que cumplen con CLS). De hecho, int se traduce en Int32 durante la compilación.
También,
He visto a este autor, y mucha literatura estándar sobre .NET que prefiere los tipos FCL (es decir, Int32) a los tipos primitivos específicos del lenguaje (es decir, int), principalmente en cuestiones de interoperabilidad.
fuente
Nada. La única diferencia entre los tipos es su tamaño (y, por lo tanto, el rango de valores que pueden representar).
fuente
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 debe obtener cero (0) porque está preguntando ... es 1 dentro del conjunto de 1, 2 o 3. si obtiene -1 como respuesta, significa que 1 no está dentro del conjunto de 1, 2 o 3 .
Mira lo que encontré: todo lo siguiente debería darte 0 y no -1 (lo he probado en todas las versiones 2.0, 3.0, 3.5, 4.0)
C#:
VB.NET:
Entonces, mi punto es, para las comparaciones Array.IndexOf, ¡solo confíe en Int32!
fuente
shorten ellos para que quepan en la matriz, mientras que el segundo literal 1 se deja como ordinarioint.(int)1no se considera igual a(short)1,(short)2,(short)3, por lo tanto el resultado es -1.Array.IndexOf(new Int16(){1,2,3}, 1S)Array.IndexOf(new Int32(){1,2,3}, 1I)Array.IndexOf(new Int64(){1,2,3}, 1L)todo funciona como se esperaba.Object[],Objectsobrecarga. C # está elevando implícitamenteinta alongcuando sea necesario (y también eleva ashorta anintolong), pero no se rechazará implícitamente, utilizando laobjectsobrecarga. ConOption Strict OnoOffVB solo usará la sobrecarga escrita cuando se proporcionen los tipos uniformes; de lo contrario, usará laobjectsobrecarga.for Array.IndexOf comparisons, only trust Int32!está mal. Si lanza el1argumento final al tipo de matriz correspondiente, funciona como se esperaba.EDITAR: Esto no es del todo cierto para C #, una etiqueta que me perdí cuando respondí esta pregunta; si hay una respuesta más específica de C #, ¡vote por eso!
Todos representan números enteros de diferentes tamaños.
Sin embargo, hay una muy, muy pequeña diferencia.
int16, int32 e int64 tienen un tamaño fijo .
El tamaño de un int depende de la arquitectura para la que está compilando: la especificación de C solo define un int como más grande o igual a un corto, aunque en la práctica es el ancho del procesador al que se dirige, que es probablemente sea de 32 bits, pero debe saber que tal vez no sea así
fuente
intyint32son uno y el mismo (entero de 32 bits)int16es corto int (2 bytes o 16 bits)int64es el tipo de datos largo (8 bytes o 64 bits)fuente
intes un alias paraInt32y, por lo tanto, siempre se garantiza que sea de 32 bits.Ambos son sinónimos, sin embargo, encontré la pequeña diferencia entre ellos,
1) No puedes usar
Int32mientras creasenum2)
Int32viene bajo declaración del sistema. si eliminausing.Systemobtendrá un error de compilación pero no en caso deintfuente
Int = Int32 -> Tipo largo original
Int16 -> Int original
Int64 -> Nuevo tipo de datos disponible después de los sistemas de 64 bits
"int" solo está disponible para compatibilidad con versiones anteriores. Realmente deberíamos estar usando nuevos tipos int para hacer que nuestros programas sean más precisos.
---------------
Una cosa más que noté en el camino es que no hay una clase llamada
Intsimilar a Int16, Int32 e Int64. Todas las funciones útiles comoTryParsefor integer provienen deInt32.TryParse.fuente