Puis-je convertir longtemps int?
-
21-08-2019 - |
Question
Je veux convertir à long
int
.
Si la valeur de int.MaxValue
> <=>, je suis heureux de le laisser envelopper autour.
Quelle est la meilleure façon?
La solution
Il suffit de faire (int)myLongValue
. Il va faire exactement ce que vous voulez (et jeter MSBs prendre RLSP) dans le contexte unchecked
(ce qui est la valeur par défaut du compilateur). Il va jeter dans OverflowException
contexte si la checked
valeur ne correspond pas dans un int
:
int myIntValue = unchecked((int)myLongValue);
Autres conseils
Convert.ToInt32(myValue);
Bien que je ne sais pas ce qu'il fera quand il est supérieur à Int.MaxValue.
Parfois, vous n'êtes pas réellement intéressé par la valeur réelle, mais dans son utilisation comme somme de contrôle / hashcode . Dans ce cas, la méthode intégrée est un bon GetHashCode()
choix:
int checkSumAsInt32 = checkSumAsIn64.GetHashCode();
Le coffre-fort et le plus rapide est d'utiliser Masking Bit avant cast ...
int MyInt = (int) ( MyLong & 0xFFFFFFFF )
Le masque de bits (0xFFFFFFFF
) la valeur dépendra de la taille de Int parce que la taille Int dépend de la machine.
Ne serait-
(int) Math.Min(Int32.MaxValue, longValue)
la bonne façon, mathématiquement parlant?