Триває набір нової групи на курс Enterprise Patterns! Старт курсу 02.12.2024. Реєструйтеся зі знижкою 30% до 31.10.2024!
Дізнатися більше
25.09.2024
7 хвилин читання

Як працює Integer.parseInt: конвертація чисел у різних системах числення

У програмуванні часто виникає потреба працювати з числами, записаними в різних системах числення. Система числення — це спосіб представлення чисел за допомогою набору символів, таких як цифри та літери, що організовані за певними правилами. Наприклад, ви, напевно, чули про двійкову систему числення, де використовуються лише цифри 0 і 1. У повсякденному житті ми найчастіше використовуємо десяткову систему, яка складається з цифр від 0 до 9. А ще є шістнадцяткова система числення, де, крім цифр від 0 до 9, використовуються також літери A-F для представлення чисел. Є й інші системи числення, про які ми поговоримо далі. Щоб ефективно конвертувати такі числа у звичну нам десяткову систему, в Java використовується метод Integer.parseInt(String s, int radix). Цей метод надає гнучкий і простий спосіб перетворення рядка, що представляє число в будь-якій системі числення (від 2 до 36), у ціле число типу int. Академія FoxmindEd може  надати тобі більш поглибленні знання у програмуванні на JAVA.  Але у  цій статті ми розглянемо, як працює цей метод і чому він є корисним інструментом у роботі з даними, що використовують різні системи числення.

🚀 Курс Java Start від Сергія Немчинського зробить ваш старт у Java зрозумілим і швидким! 📆 Тривалість курсу: Середній час проходження – 2-4 тижні.
Записатись на курс

Основна частина

Метод 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());

       }

   }

}

Як працює обчислення:

  1. Перш за все необхідно розкласти строку на цифри та букви:
    • Спочатку ми розбиваємо строку на окремі цифри та букви. Наприклад, для строки “3B5” – це буде 3, B і 5.
  2. Визначити позиції кожної цифри та букви:
    • Кожна цифра та буква у числі має свою позицію. Позиція визначається від нуля справа наліво, починаючи з останньої цифри/букви. Наприклад, у строці “3B5”:
      • Цифра 5 знаходиться на позиції 0.
      • Цифра B знаходиться на позиції 1.
      • Цифра 3 знаходиться на позиції 2.
  3. Обчислити вагу кожної цифри та букви:
    • Кожна цифра чи буква множиться на систему числення у ступені, що відповідає її позиції. Наприклад, ми передамо radix 12:
      • 5 множиться на 12⁰.
      • B множиться на 12¹ (B має значення 11)
      • 3 множиться на 12².
  4. Скласти всі результати:
    • Потім ми додаємо всі ці результати разом, щоб отримати результат: 

Підрахунок:                           3*12+ 11*12+  5*12= 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());

       }

   }

}

Висновок

Конвертація чисел між різними системами числення є важливим інструментом у програмуванні, особливо при роботі з даними, що використовують нестандартні формати або коли потрібно виконувати операції над числами в різних системах числення. Це допомагає у роботі з пам’яттю, мережевими протоколами, налаштуваннями мікроконтролерів, у криптографії, а також у процесі налагодження та аналізу програмного забезпечення. 

FAQ
Що робить метод Integer.parseInt(String s, int radix)?

Він перетворює рядок, що представляє число в різній системі числення (від 2 до 36), у ціле число типу int.

Як вибрати правильне значення radix для системи числення?

Radix — це основа системи числення. Для двійкової системи radix дорівнює 2, для десяткової — 10, для шістнадцяткової — 16.

Які символи використовуються в різних системах числення?

Системи від 2 до 9 використовують цифри 0-9, а від 10 до 36 — ще й літери A-Z (де A=10, B=11, і так далі).

Що станеться, якщо передати символи, які не відповідають системі числення?

Якщо в рядку є недопустимі символи для вказаної системи числення, виникне помилка NumberFormatException.

Чому radix не може бути більшим за 36 або меншим за 2?

Метод Integer.parseInt підтримує системи числення лише від 2 до 36, оскільки вони використовують лише цифри та літери латинського алфавіту.

Як працює конвертація числа з рядка?

Кожен символ у рядку інтерпретується відповідно до його позиції та множиться на основу системи числення у певному ступені. Потім результати додаються для отримання кінцевого числа.

У вас залишилися запитання про те, як працює Integer.parseInt? Запитуйте в коментарях нижче!

Додати коментар

Ваш імейл не буде опубліковано. Обов'язкові поля відзначені *

Зберегти моє ім'я, імейл та адресу сайту у цьому браузері для майбутніх коментарів