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