Я пытаюсь перевести код Java на С# и столкнулся с проблемой при работе с операциями BigInteger. Я нашел несколько ресурсов по реализации BigInteger на C# и самому intValue. Но нет никакой информации об эквиваленте BigInteger.intValue в С#. Определение в Java:
Преобразует этот BigInteger в int. Это преобразование аналогично сужающему примитивному преобразованию из long в int, как определено в разделе 5.1.3 Спецификации языка Java™: если это BigInteger слишком велико, чтобы поместиться в int, возвращаются только младшие 32 бита. Примечание. что это преобразование может привести к потере информации об общей величине значения BigInteger, а также вернуть результат с противоположным знак.
Но получение аналогичных результатов с использованием (int) в C# приводит к ошибке:
Значение было либо слишком большим, либо слишком маленьким для Int32.
Я также пытался использовать только младшие байты без успеха Будем признательны, если кто-то поможет
@OHGODSPIDERS Зачем им знать, как что-то сделать на Java, если их вопрос касается перевода чего-то с Java на C#?
@jdweng Они ищут эквивалент приведения long
к int
, где он не будет давать сбоев, а вместо этого просто усекает биты.
Чтобы получить поведение Java, замаскируйте младшие биты значения и преобразуйте результат:
int result = (int) (uint) (bi & uint.MaxValue);
(Это использует неявное преобразование UInt32 в BigInteger и явное преобразование наоборот)
Вы можете преобразовать Big в Integer, только если значение находится в пределах целого числа. Эта ошибка возникает, если число слишком велико, положительное или отрицательное.