Могу ли я преобразовать long в int?

Я хочу, чтобы преобразовать long до int.

, если значение long>int.MaxValue, Я счастлив позволить ему обернуться.

каков наилучший способ?

4 ответов


просто делать (int)myLongValue. Он будет делать именно то, что вы хотите (отбрасывая MSBs и принимая LSBs) в unchecked context (который является компилятором по умолчанию). Он бросит OverflowException на checked контекст, если значение не помещается в элементе int:

int myIntValue = unchecked((int)myLongValue);

Convert.ToInt32(myValue);

хотя я не знаю, что он будет делать, когда он больше, чем int.Максвеллову.


иногда вы на самом деле не заинтересованы в реальной стоимости, но в его использовании как контрольную сумму/хэш-код. В этом случае, встроенный метод GetHashCode() хороший выбор:

int checkSumAsInt32 = checkSumAsIn64.GetHashCode();

безопасный и самый быстрый путь использовать маскировать бита перед бросанием...

int MyInt = (int) ( MyLong & 0xFFFFFFFF )

Битовая Маска ( 0xFFFFFFFF) значение будет зависеть от размера Int, потому что размер Int зависит от машины.