Je veux convertir long
en int
.
Si la valeur de long
> int.MaxValue
, je le laisserai volontiers.
Quel est le meilleur moyen?
Il suffit de faire (int)myLongValue
. Cela fera exactement ce que vous voulez (en supprimant les MSB et en prenant les LSB) dans le contexte unchecked
(qui correspond au paramètre par défaut du compilateur). Cela jettera OverflowException
dans le contexte checked
si la valeur ne rentre pas dans un int
:
int myIntValue = unchecked((int)myLongValue);
Convert.ToInt32(myValue);
Bien que je ne sache pas ce qu’il fera quand il est supérieur à int.MaxValue.
Parfois, la valeur réelle ne vous intéresse pas, mais son utilisation sous la forme somme de contrôle/hashcode. Dans ce cas, la méthode intégrée GetHashCode()
est un bon choix:
int checkSumAsInt32 = checkSumAsIn64.GetHashCode();
Le moyen le plus sûr et le plus rapide consiste à utiliser Bit Masking avant la distribution ...
int MyInt = (int) ( MyLong & 0xFFFFFFFF )
La valeur du masque de bits (0xFFFFFFFF
) dépend de la taille de Int car celle-ci dépend de la machine.
Ne serait pas
(int) Math.Min(Int32.MaxValue, longValue)
être la bonne façon, mathématiquement parlant?