¿Cuál es la diferencia entre int
, System.Int16
, System.Int32
y System.Int64
aparte 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 :
int
y deInt32
hecho son sinónimos;int
será un poco más familiar,Int32
hace 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',Int32
donde el tamaño es importante (código criptográfico, estructuras) para que los futuros mantenedores sepan que es seguro ampliar y,int
si corresponde, pero que deberían cambiar lasInt32
variables de la misma manera .El código resultante será idéntico: la diferencia es puramente legible o la apariencia del código.
int16
para ahorrar recursos de memoria, en lugar de simplemente usarloint
?int
es , independientemente del sistema. ¿Quizás estás pensando en C ++?Int32
La ú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 bytesInt32
yint
: 4 bytesInt64
: 8 bytesHay una pequeña diferencia entre
Int64
y el resto. En una plataforma de 32 bits,Int64
no se garantiza que las asignaciones a una ubicación de almacenamiento sean atómicas. Está garantizado para todos los otros tipos.fuente
Int64
en32 bit Windows Operating System
entonces ¿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
Int64
el tipo de datos se puede representar usandoL
ol
sufijo mientrasInt16
oInt32
no 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
short
en ellos para que quepan en la matriz, mientras que el segundo literal 1 se deja como ordinarioint
.(int)1
no 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[],Object
sobrecarga. C # está elevando implícitamenteint
a along
cuando sea necesario (y también eleva ashort
a anint
olong
), pero no se rechazará implícitamente, utilizando laobject
sobrecarga. ConOption Strict On
oOff
VB solo usará la sobrecarga escrita cuando se proporcionen los tipos uniformes; de lo contrario, usará laobject
sobrecarga.for Array.IndexOf comparisons, only trust Int32!
está mal. Si lanza el1
argumento 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
int
yint32
son uno y el mismo (entero de 32 bits)int16
es corto int (2 bytes o 16 bits)int64
es el tipo de datos largo (8 bytes o 64 bits)fuente
int
es un alias paraInt32
y, 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
Int32
mientras creasenum
2)
Int32
viene bajo declaración del sistema. si eliminausing.System
obtendrá un error de compilación pero no en caso deint
fuente
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
Int
similar a Int16, Int32 e Int64. Todas las funciones útiles comoTryParse
for integer provienen deInt32.TryParse
.fuente