Domanda

voglio convertire long a int.

Se il valore della int.MaxValue> <=>, sono felice di lasciare avvolgere intorno.

Qual è il modo migliore?

È stato utile?

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?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top