В программировании часто возникает необходимость работать с числами, записанными в разных системах счисления. Система счисления — это способ представления чисел с помощью набора символов, таких как цифры и буквы, организованных по определенным правилам. Например, вы, вероятно, слышали о двоичной системе счисления, в которой используются только цифры 0 и 1. В повседневной жизни мы чаще всего используем десятичную систему, которая состоит из цифр от 0 до 9. А еще есть шестнадцатеричная система счисления, где, кроме цифр от 0 до 9, используются также буквы A-F для представления чисел. Есть и другие системы счисления, о которых мы поговорим далее. Чтобы эффективно конвертировать такие числа в привычную нам десятичную систему, в Java используется метод Integer.parseInt(String s, int radix). Этот метод предоставляет гибкий и простой способ преобразования строки, представляющей число в любой системе счисления (от 2 до 36), в целое число типа int. Академия FoxmindEd может предоставить тебе более углубленные знания в программировании на JAVA. Но в этой статье мы рассмотрим, как работает этот метод и почему он является полезным инструментом в работе с данными, использующими различные системы счисления.
Основная часть
Метод Integer.parseInt(String s, int radix) позволяет конвертировать строку, которая представляет число в любой системе счисления (от 2 до 36), в десятичное число (типа int). Мы указываем значение, и систему счисления в которой оно записано, а метод конвертирует его в десятичное значение. Система счисления — это способ записи чисел с использованием цифр и букв по определенным правилам. Думаю, многие знают о двоичной системе (цифры 0 и 1) или о десятичной (цифры от 0 до 9), которой мы пользуемся в повседневной жизни.
То есть мы можем конвертировать «00110» из двоичной системы счисления в понятное для нас значение, указав radix 2. Или можем преобразовать строку с числовым значением «145» в int, использовав radix 10 (десятичная система счисления).
Метод принимает два аргумента: строку и основание системы счисления (от 2 до 36). Символы для каждой системы счисления включают цифры от 0 до 9 и буквы от A до Z, где A представляет 10, B представляет 11 и так далее до Z, которая представляет 35.
Понять, какие символы доступны в системе счисления, довольно просто. Число, описывающее систему счисления, указывает на количество символов в ней. Система счисления с основанием 8 имеет 8 символов, в двоичной — два и так далее. Отправной точкой являются цифры от 0 до 9, а дальше, если нужно больше символов, добавляются буквы. Восьмеричная система содержит цифры от 0 до 7 (всего 8 символов). В системе счисления с основанием 16 — шестнадцать символов: от 0 до 9 и буквы от A до F (всего 16 символов).
- Возможные значения для систем счисления:
Цифры: 0 1 2 3 4 5 6 7 8 9
Буквы: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
- Числовое представление букв:
A(11), B(12), C(13)… X(34), Y(35), Z(36)
- Примеры систем счисления и их значение:
16-ва: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
12-ва: 0,1,2,3,4,5,6,7,8,9,A,B
Если символ не входит в допустимый диапазон для данной системы, возникает ошибка (NumberFormatException). Передав «radix» 12 и строку «3K5» мы получим ошибку, ведь последняя буква, которая присутствует в системе 12 это B, а мы передали K. Или при передаче в систему счисления 2 строки «05» или любой строки с буквами, ведь 5-ки или букв нет в системе счисления 2. Там представлены только 0 и 1. Так же ошибка будет, если передать radix больше 36, или меньше 2.
public class Main {
public static void main(String[] args) {
String str = "3B5";
try {
int number = Integer.parseInt(str, 12);
System.out.println(number); // -> 569
} catch (NumberFormatException e) {
System.out.println(e.getMessage());
}
}
}
Как работает вычисление:
- Прежде всего необходимо разложить строку на цифры и буквы:
- Сначала мы разбиваем строку на отдельные цифры и буквы. Например, для строки «3B5» — это будет 3, B и 5.
- Определить позиции каждой цифры и буквы:
- Каждая цифра и буква в числе имеет свою позицию. Позиция определяется от нуля справа налево, начиная с последней цифры/буквы. Например, в строке «3B5»:
- Цифра 5 находится на позиции 0.
- Цифра B находится на позиции 1.
- Цифра 3 находится на позиции 2.
- Каждая цифра и буква в числе имеет свою позицию. Позиция определяется от нуля справа налево, начиная с последней цифры/буквы. Например, в строке «3B5»:
- Вычислить вес каждой цифры и буквы:
- Каждая цифра или буква умножается на систему счисления в степени, соответствующей ее позиции. Например, мы передадим radix 12:
- 5 умножается на 12⁰.
- B умножается на 12¹ (B имеет значение 11)
- 3 умножается на 12².
- Каждая цифра или буква умножается на систему счисления в степени, соответствующей ее позиции. Например, мы передадим radix 12:
- Составить все результаты:
- Затем мы складываем все эти результаты вместе, чтобы получить результат:
Разбиваем на отдельные символы: | 3 | В | 5 |
Позиция символов: | 2 | 1 | 0 |
Числовое значение букв: | 11 |
Подсчет: 3*122+ 11*121+ 5*120= 569
Еще немного примеров:
public class Main {
public static void main(String[] args) {
String str = "17";
try {
int number = Integer.parseInt(str, 8);
System.out.println(number); // -> 1*8¹+7*8⁰=15
} catch (NumberFormatException e) {
System.out.println(e.getMessage());
}
}
}
public class Main {
public static void main(String[] args) {
String str = "D"; // буква D имеет вес 13
try {
int number = Integer.parseInt(str, 16);
System.out.println(number); // -> 13*16⁰ =13
} catch (NumberFormatException e) {
System.out.println(e.getMessage());
}
}
}
Поэтому чтобы нам конвертировать строку с валидным числовым значением в int, достаточно передать radix 10, ведь, напоминаю, мы пользуемся десятичной системой счисления. Как видите, число 17 в десятичной системе счисления это 17, а в восьмеричной — 15.
public class Main {
public static void main(String[] args) {
String str = "17";
try {
int number = Integer.parseInt(str, 10);
System.out.println(number); // -> 17
} catch (NumberFormatException e) {
System.out.println(e.getMessage());
}
}
}
Заключение
Конвертация чисел между различными системами счисления является важным инструментом в программировании, особенно при работе с данными, использующими нестандартные форматы или когда нужно выполнять операции над числами в разных системах счисления. Это помогает в работе с памятью, сетевыми протоколами, настройками микроконтроллеров, в криптографии, а также в процессе отладки и анализа программного обеспечения.
У вас остались вопросы о том, как работает Integer.parseInt? Спрашивайте в комментариях ниже!