Ограничения BigInteger.valueOf () - PullRequest
       11

Ограничения BigInteger.valueOf ()

2 голосов
/ 20 января 2010

Есть ли у valueOf для BigInteger какие-либо ограничения? Я не уверен, но где-то читал, что данное число может иметь длину = только длинную.

Ответы [ 4 ]

7 голосов
/ 20 января 2010

Сам класс BigInteger используется для представления неизменяемых целых чисел произвольной точности. Это означает, что он может представлять целые числа любого размера (конечно, ограниченные памятью на вашем компьютере).

Однако метод valueOf возвращает BigInteger, значение которого равно значению указанного long. Таким образом, BigInteger, созданный таким образом по определению, может быть большим, как Long.MAX_VALUE

BigInteger объекты, созданные другими методами и конструкторами класса BigInteger, конечно, могут быть больше, чем Long.MAX_VALUE.

Взять, к примеру, приведенный ниже код:

BigInteger big1 = BigInteger.valueOf(Long.MAX_VALUE);
BigInteger big2 = BigInteger.valueOf(Long.MAX_VALUE);
BigInteger big3 = big1.add(big2);

BigInteger с именем big3 больше Long.MAX_VALUE, хотя его составные части были созданы с использованием метода valueOf.

2 голосов
/ 20 января 2010
Метод

BigInteger valueOf() принимает значение long в качестве единственного параметра. Таким образом, максимальное число, которое вы можете передать ему, является максимальным значением, которое long может представлять (2^63-1 = 9223372036854775807).

0 голосов
/ 02 февраля 2010

Рассмотрите возможность использования конструктора BigInteger(String val, int radix). Это может создать BigInteger любого размера.

0 голосов
/ 20 января 2010

Согласно Спецификации Java API для класса BigInteger, метод BigInteger.valueOf принимает long в качестве аргумента, поэтому наибольшее число, которое можно получить с помощью метода BigInteger.valueOf, равно Long.MAX_VALUE, что равно 2 ^ 63 - 1.

...