Перевод систем счисления – одна из наиболее распространённых задач в программировании.
Среди многочисленных возможностей, которые предоставляет разработчикам класс BigInteger, это достаточно простой перевод целых чисел из одной системы счисления в другую.
Для этого необходимо особым образом воспользоваться конструктором этого класса в сочетании с перегрузкой его метода toString, которая возвращает строковое представление числа в соответствующей системе счисления.
Допустим, имеется объект BigInteger, в котором хранится число 8. После вызова метода toString с параметром 2 будет возвращено строковое представление этого числа в двоичной системе счисления.
1 2 |
BigInteger a= new BigInteger("8"); String s=a.toString(2); |
В переменной s будет строка “1000”, что соответствует 8 в двоичной системе. Таким образом, было получено число в виде строки, но для работы с числом необходимо, чтобы оно было в виде числа.
Поэтому создадим второй объект BigInteger, который будет хранить число уже в двоичной системе.
1 |
BigInteger b= new BigInteger(s,2); |
Обратите внимание на второй параметр в конструкторе. Он предназначен для указания используемой степени счисления. По умолчанию в BigInteger используется десятичная система.
В итоге получается фрагмент из 3х строк кода:
1 2 3 |
BigInteger a= new BigInteger("8"); String s=a.toString(2); BigInteger b= new BigInteger(s,2); |
Он весьма наглядно иллюстрирует суть алгоритма, но, в тоже время является довольно громоздким. Попробуем его упростить.
Первое, от чего можно в нём отказаться, это промежуточная строковая переменная s. После отказа от неё алгоритм сводится уже к двум строкам:
1 2 |
BigInteger a= new BigInteger("8"); BigInteger b= new BigInteger(a.toString(2),2); |
Java также позволяет создать объект с исходными данными непосредственно в параметре конструктора объекта для хранения результата. Поэтому, в конечном итоге, весь алгоритм перевода систем счисления может быть представлен всего на всего одной единственной строкой кода.
1 |
BigInteger b =new BigInteger(new BigInteger("8").toString(2),2); |
Таким образом, с помощью класса BigInteger можно просто и удобно переводить числа из одной системы счисления в другую.
Очень нужная информация …. с помощью одной строки можно переводить десятеричное число в любую систему исчисления BigInteger b =new BigInteger(new BigInteger(«155»).toString(16)); Например 155 в 16-ричную систему. А как написать, что бы не только с десятеричной, а с любой другой например с 8-ричной в 10-ричную.???
Спасибо за важное замечание! Для работы с произвольной системой счисления используйте конструктор BigInteger со вторым параметром. Я немного дополнил статью и, приведённые в ней, примеры теперь отвечают и на этот вопрос.