У програмуванні часто виникає потреба працювати з числами, записаними в різних системах числення. Система числення — це спосіб представлення чисел за допомогою набору символів, таких як цифри та літери, що організовані за певними правилами. Наприклад, ви, напевно, чули про двійкову систему числення, де використовуються лише цифри 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 символів).
курси Junior саме для вас.
- Можливі значення для систем числення:
Цифри: 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? Запитуйте в коментарях нижче!