c# - entre - int16 range
¿Cuál es la diferencia entre int, Int16, Int32 e Int64? (10)
-
int
eint32
son uno y el mismo (entero de 32 bits) -
int16
es short int (2 bytes o 16 bits) -
int64
es el tipo de datos largo (8 bytes o 64 bits)
¿Cuál es la diferencia entre int
, System.Int16
, System.Int32
y System.Int64
aparte de sus tamaños?
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 compilation error
}
enum Test : int
{ XXX = 1 // Works fine
}
2) Int32
viene bajo declaración del sistema. si elimina using.System
obtendrá error de compilación pero no en caso de int
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
eInt32
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 unint
si es apropiado, pero deberían tener cuidado cambiando variablesInt32
en de la misma manera.El código resultante será idéntico: la diferencia es puramente legibilidad o apariencia del código.
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 arquitectura para la que está compilando: 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
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
eint
: 4 bytes -
Int64
: 8 bytes
Hay una pequeña diferencia entre Int64
y el resto. 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.
Nada. La única diferencia entre los tipos es su tamaño (y, por lo tanto, el rango de valores que pueden representar).
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 compilador 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 compilación.
También,
En C #, los mapas largos a System.Int64, pero en un lenguaje de programació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 compilará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!
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.
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 programas 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
.