¿Puedo convertir a int largo?
-
21-08-2019 - |
Pregunta
Quiero convertir a long
int
.
Si el valor de int.MaxValue
> <=>, estoy feliz de que se envuelva alrededor.
¿Cuál es la mejor manera?
Solución
Sólo hacer (int)myLongValue
. Te va a hacer exactamente lo que quiere (descartando los MSB y LSB teniendo) en unchecked
contexto (que es el valor por defecto del compilador). Se va a lanzar en OverflowException
checked
contexto si el valor no se ajusta en un int
:
int myIntValue = unchecked((int)myLongValue);
Otros consejos
Convert.ToInt32(myValue);
A pesar de que no sé lo que hará cuando es mayor que int.MaxValue.
A veces usted no está realmente interesado en el valor real, pero en su uso como suma de comprobación / código hash . En este caso, el método integrado GetHashCode()
es una buena opción:
int checkSumAsInt32 = checkSumAsIn64.GetHashCode();
La forma más segura y más rápida es utilizar enmascaramiento de bits antes de fundición ...
int MyInt = (int) ( MyLong & 0xFFFFFFFF )
La máscara de bits (0xFFFFFFFF
) valor dependerá del tamaño de Int porque el tamaño Int depende de máquina.
¿No sería
(int) Math.Min(Int32.MaxValue, longValue)
ser el camino correcto, matemáticamente hablando?