Вопрос

Я хочу обратить 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)

быть правильным способом, с математической точки зрения?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top