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?

Était-ce utile?

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?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top