web-dev-qa-db-fra.com

Puis-je convertir long en int?

Je veux convertir long en int.

Si la valeur de long> int.MaxValue, je le laisserai volontiers.

Quel est le meilleur moyen?

133
inspite

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);
204
Mehrdad Afshari
Convert.ToInt32(myValue);

Bien que je ne sache pas ce qu’il fera quand il est supérieur à int.MaxValue.

31
Max Schmeling

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();
15
realbart

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.

7
Mashake

Ne serait pas

(int) Math.Min(Int32.MaxValue, longValue)

être la bonne façon, mathématiquement parlant?

0
Rémy Esmery