ПОИСК
Категории книг
ОПРОС
Вопрос: Какой язык программирования вы предпочитаете
С/C++
Delphi
Visual Basic
Perl
Java
PHP
ASP
Другой
ЭТО ПОЛЕЗНО!
ОБРАТНАЯ СВЯЗЬ

/ Главная / Программирование / Иллюстрированный самоучитель по Java
Иллюстрированный самоучитель по 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 .

 



Компьютерные книги © 2006-2013
computers.plib.ru