Posso convertire lungo a int?
-
21-08-2019 - |
Domanda
voglio convertire long
a int
.
Se il valore della int.MaxValue
> <=>, sono felice di lasciare avvolgere intorno.
Qual è il modo migliore?
Soluzione
Basta fare (int)myLongValue
. Ti farà esattamente quello che vuoi (scartando MSB e tenendo LSB) a unchecked
contesto (che è il default del compilatore). Sarà gettare OverflowException
in checked
contesto se il valore non rientra in un int
:
int myIntValue = unchecked((int)myLongValue);
Altri suggerimenti
Convert.ToInt32(myValue);
Anche se non so che cosa farà quando è maggiore di int.MaxValue.
A volte non si è realmente interessati al valore reale, ma nel suo uso come checksum / codice hash . In questo caso, il metodo incorporato GetHashCode()
è una buona scelta:
int checkSumAsInt32 = checkSumAsIn64.GetHashCode();
Il modo più sicuro e più veloce è quello di utilizzare Bit mascheramento prima fusione ...
int MyInt = (int) ( MyLong & 0xFFFFFFFF )
La maschera di bit (0xFFFFFFFF
) valore dipenderà dalla dimensione della Int perché la dimensione Int dipende macchina.
Non sarebbe
(int) Math.Min(Int32.MaxValue, longValue)
essere il modo corretto, matematicamente parlando?