Класс Biglnteger
Все примитивные целые типы имеют ограниченный диапазон значений. В целочисленной арифметике Java нет переполнения, целые числа приводятся по модулю, равному диапазону значений.
Для того чтобы было можно производить целочисленные вычисления с любой разрядностью, в состав Java API введен класс
Biglnteger
, хранящийся в пакете
java.math
. Этот класс расширяет класс
Number
, следовательно, в нем переопределены методы
doubleValue(), floatValue(), intValue(), longValue()
. Методы
byteVaiue()
и
shortvalue()
не переопределены, а прямо наследуются от класса
Number
.
Действия с объектами класса
Biglnteger
не приводят ни к переполнению, ни к приведению по модулю. Если результат операции велик, то число разрядов просто увеличивается. Числа хранятся в двоичной форме с дополнительным кодом.
Перед выполнением операции числа выравниваются по длине распространением знакового разряда.
Шесть конструкторов класса создают объект класса
BigDecimai
из строки символов (знака числа и цифр) или из массива байтов.
Две константы —
ZERO
и
ONE
— моделируют нуль и единицу в операциях с объектами класса
Biglnteger
.
Метод
toByteArray()
преобразует объект в массив байтов.
Большинство методов класса
Biglnteger
моделируют целочисленные операции и функции, возвращая объект класса
Biglnteger
:
abs()
— возвращает объект, содержащий абсолютное значение числа, хранящегося в данном объекте
this
;
add(x)
— операция
this + х
;
and(x)
— операция
this & х
;
andNot(x)
— операция
this & (~х)
;
divide (x)
— операция
this / х
;
divideAndRemainder(х)
— возвращает массив из двух объектов класса
Biglnteger
, содержащих частное и остаток от деления
this
на
х
;
gcd(x)
— наибольший общий делитель, абсолютных, значений объекта
this
и аргумента
х
;
mах(х)
— наибольшее из значений объекта
this
и аргумента
х
;
min(x)
— наименьшее из значений объекта
this
и аргумента
х
;
mod(x)
— остаток от деления объекта
this
на аргумент метода
х
;
modinverse(x)
— остаток от деления числа, обратного объекту
this
, на аргумент
х
;
modPow(n, m)
— остаток от деления объекта
this
, возведенного в степень
n
, на
m
;
multiply (х)
—операция
this * х
;
negate()
— перемена знака числа, хранящегося в объекте;
not()
— операция
~this
;
оr(х)
— операция
this | х
;
pow(n)
— операция возведения числа, хранящегося в объекте, в степень
n
;
remainder(х)
—операция
this % х
;
shiftLeft (n)
—
операция
this « n
;
shiftRight (n)
— операция this » n;
signum()
— функция
sign (x)
;
subtract (x)
— операция
this - x
;
xor(x)
— операция
this ^ x
.
В листинге 4.3 приведены примеры использования данных методов, а рис. 4.4 показывает результаты выполнения этого листинга.
Рис. 4.4.
Методы класса
Biglnteger
в программе
BiglntegerTest
Листинг 4.3.
Методы класса Biglnteger в программе BiglntegerTest
import Java.math.Biglnteger;
class BiglntegerTest{
public static void main(String[] args){
Biglnteger a = new Biglnteger("99999999999999999") ;
Biglnteger b = new Biglnteger("88888888888888888888");
System.out.println("bits in a = " + a.bitLength());
System.out.println("bits in b = " + b.bitLengthO);
System.out.println("a + b = " + a.add(b));
System.out.println("a & b = " + a.and(b));
System.out.println("a & ~b = " + a.andNot(b));
System.out.println("a / b = " + a.divide(b));
Biglnteger[] r = a.divideAndRemainder(b);
System.out.println("a / b: q = " + r[0] + ", r = " + r[l]);
System.out.println("gcd(a, b) = " + a.gcd(b));
System.out.println("max(a, b) = " + a.max(b));
System.out.printin("min(a, b) = " + a.min(b));
System.out.println("a mod b = " + a.mod(b));
System.out.println("I/a mod b = " + a.modlnverse(b));
System.out.println("алп mod b = " + a.modPow(a, b));
System.out.println("a * b = " + a.multiply(b));
System.out.println("-a = " + a.negate());
System, out. println ("~a = " + a.not());
System.out.println("a | b = " + a.or(b));
System.out.println("а л 3 = " + a.pow(3));
System.out.println("a % b = " + a.remainder(b));
System.out.println("a « 3 = " + a.shiftLeft(3)};
System.out.println("a » 3 = " + a.shiftRight(3));
System.out.println("sign(a) = " + a.signum());
System.out.println("a - b = " + a.subtract(b));
System.out.println("а л b = " + a.xor(b));
}
}
Обратите внимание на то, что в программу листинга 4.3 надо импортировать пакет
Java.math
.