Могу ли я преобразовать 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 зависит от машины.