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?

¿Fue útil?

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?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top