Могу ли я конвертировать долго в INT? - PullRequest
129 голосов
/ 13 мая 2009

Я хочу конвертировать long в int.

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

Какой самый лучший способ?

Ответы [ 5 ]

200 голосов
/ 13 мая 2009

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

int myIntValue = unchecked((int)myLongValue);
30 голосов
/ 13 мая 2009
Convert.ToInt32(myValue);

Хотя я не знаю, что он будет делать, когда он больше, чем int.MaxValue.

15 голосов
/ 19 ноября 2012

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

int checkSumAsInt32 = checkSumAsIn64.GetHashCode();
7 голосов
/ 21 августа 2014

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

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

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

0 голосов
/ 02 марта 2019

Не был бы

(int) Math.Min(Int32.MaxValue, longValue)

Правильно ли, математически говоря?

...