Перевод систем счисления с помощью класса BigInteger. Или как перевести число в другую систему счисления с помощью одной сроки кода

Перевод систем счисления – одна из наиболее распространённых задач в программировании.

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

Для этого необходимо особым образом воспользоваться конструктором этого класса в сочетании с перегрузкой его метода toString, которая возвращает строковое представление числа в соответствующей системе счисления.

Допустим, имеется объект BigInteger, в котором хранится число 8. После вызова метода toString с параметром 2 будет возвращено строковое представление этого числа в двоичной системе счисления.

В переменной s будет строка “1000”, что соответствует 8 в двоичной системе. Таким образом, было получено число в виде строки, но для работы с числом необходимо, чтобы оно было в виде числа.

Поэтому создадим второй объект BigInteger, который будет хранить число уже в двоичной системе.

Обратите внимание на второй параметр в конструкторе. Он предназначен для указания используемой степени счисления. По умолчанию в BigInteger используется десятичная система.

В итоге получается фрагмент из 3х строк кода:

Он весьма наглядно иллюстрирует суть алгоритма, но, в тоже время является довольно громоздким. Попробуем его упростить.

Первое, от чего можно в нём отказаться, это промежуточная строковая переменная s. После отказа от неё алгоритм сводится уже к двум строкам:

Java также позволяет создать объект с исходными данными непосредственно в параметре конструктора объекта для хранения результата. Поэтому, в конечном итоге, весь алгоритм перевода систем счисления может быть представлен всего на всего одной единственной строкой кода.

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

2 комментария

  1. Очень нужная информация …. с помощью одной строки можно переводить десятеричное число в любую систему исчисления BigInteger b =new BigInteger(new BigInteger(«155»).toString(16)); Например 155 в 16-ричную систему. А как написать, что бы не только с десятеричной, а с любой другой например с 8-ричной в 10-ричную.???

    1. Спасибо за важное замечание! Для работы с произвольной системой счисления используйте конструктор BigInteger со вторым параметром. Я немного дополнил статью и, приведённые в ней, примеры теперь отвечают и на этот вопрос.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *