Иллюстрированный самоучитель по Java

Класс 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

.


Содержание раздела