Могу ли я преобразовать long в int?
-
21-08-2019 - |
Вопрос
Я хочу обратить long
Для int
.
Если значение long
> int.MaxValue
, Я счастлив позволить этому развернуться.
Каков наилучший способ?
Решение
Просто делай (int)myLongValue
.Это будет делать именно то, что вы хотите (отбрасывая MSBS и принимая LSBS) в unchecked
контекст (который используется компилятором по умолчанию).Это бросит OverflowException
в checked
контекст, если значение не вписывается в int
:
int myIntValue = unchecked((int)myLongValue);
Другие советы
Convert.ToInt32(myValue);
Хотя я не знаю, что он будет делать, когда будет больше, чем int.MaxValue .
Иногда вас на самом деле интересует не фактическое значение, а его использование в качестве контрольная сумма/хэш-код.В этом случае встроенный метод GetHashCode()
это хороший выбор:
int checkSumAsInt32 = checkSumAsIn64.GetHashCode();
Самый безопасный и быстрый способ - использовать маскировку бита перед приведением...
int MyInt = (int) ( MyLong & 0xFFFFFFFF )
Битовая маска ( 0xFFFFFFFF
) значение будет зависеть от размера Int, потому что размер Int зависит от машины.
Не стал бы
(int) Math.Min(Int32.MaxValue, longValue)
быть правильным способом, с математической точки зрения?