Як перевести двійкове число в десяткове (і hex): покроково

Щоб перевести двійкове число в десяткове, помножте кожен біт на вагу його розряду й додайте результати. Ваги розрядів — це степені двійки, які подвоюються справа наліво: 1, 2, 4, 8, 16 і так далі. Наприклад, двійкове 1011 дорівнює 1×8 + 0×4 + 1×2 + 1×1 = 8 + 0 + 2 + 1 = 11.

Спробуйте безкоштовно: Конвертер основ цілих чисел Безкоштовно, без реєстрації.

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

Як читати двійкові числа: ваги розрядів

Двійковий код — це інформація, записана лише двома символами, 0 і 1. Комп’ютери використовують його, бо їхні схеми працюють із двома станами, наприклад низькою та високою напругою. Кожна двійкова цифра називається бітом, а група з 8 бітів — байтом.

Двійкова система позиційна, так само як десяткова. У десятковій системі кожен розряд важить у 10 разів більше, ніж розряд праворуч від нього (одиниці, десятки, сотні). У двійковій кожен розряд важить у 2 рази більше, ніж розряд праворуч:

Позиція (справа) 8-ма 7-ма 6-та 5-та 4-та 3-тя 2-га 1-ша
Степінь двійки 2⁷ 2⁶ 2⁵ 2⁴ 2⁰
Вага розряду 128 64 32 16 8 4 2 1

1 означає «врахувати цю вагу», а 0 — «пропустити її».

Як перевести двійкове число в десяткове крок за кроком

Спосіб 1: додайте ваги розрядів

Візьмімо двійкове число 11010110. Запишіть під бітами ваги розрядів, залиште ті, де біт дорівнює 1, і додайте їх:

Біт 1 1 0 1 0 1 1 0
Вага розряду 128 64 32 16 8 4 2 1
Біт × вага 128 64 0 16 0 4 2 0

128 + 64 + 16 + 4 + 2 = 214. Отже, 11010110₂ = 214₁₀. Маленький нижній індекс вказує основу системи числення, коли вона не очевидна.

Спосіб 2: подвоюйте й додавайте

Для цього способу таблиця не потрібна. Почніть із 0 і читайте біти зліва направо: подвоюйте поточну суму й додавайте поточний біт.

Для 101101:

  1. 0 × 2 + 1 = 1
  2. 1 × 2 + 0 = 2
  3. 2 × 2 + 1 = 5
  4. 5 × 2 + 1 = 11
  5. 11 × 2 + 0 = 22
  6. 22 × 2 + 1 = 45

Отже, 101101₂ = 45. Перевірка способом 1: 32 + 8 + 4 + 1 = 45.

Як перевести десяткове число у двійкове

Послідовне ділення на 2

Поділіть число на 2, запишіть остачу (0 або 1) і повторюйте з часткою, доки вона не стане 0. Потім прочитайте остачі знизу вгору. Ось приклад для 156:

Ділення Частка Остача
156 ÷ 2 78 0
78 ÷ 2 39 0
39 ÷ 2 19 1
19 ÷ 2 9 1
9 ÷ 2 4 1
4 ÷ 2 2 0
2 ÷ 2 1 0
1 ÷ 2 0 1

Читаючи знизу вгору, отримуємо 156 = 10011100₂. Перевірка: 128 + 16 + 8 + 4 = 156. Найпоширеніша помилка — читати остачі згори вниз, тоді біти виходять у зворотному порядку.

Віднімання степенів двійки

Для невеликих чисел часто швидше взяти найбільший степінь двійки, що вміщується в число, відняти його й повторити. Для 100: вміщується 64 (100 − 64 = 36), далі 32 (36 − 32 = 4), далі 4 (4 − 4 = 0). Поставте 1 під 64, 32 і 4, а 0 — у всіх інших розрядах: 100 = 1100100₂.

Що таке шістнадцяткова система?

Шістнадцяткова система (hex) має основу 16. Їй потрібно 16 цифр, тому після 0–9 вона використовує літери A–F для значень від 10 до 15: A = 10, B = 11, C = 12, D = 13, E = 14, F = 15. Кожен розряд важить у 16 разів більше, ніж розряд праворуч: 1, 16, 256, 4 096 і так далі.

Програмісти використовують hex, бо ця система точно узгоджується з двійковою. Чотири біти мають 16 можливих комбінацій (від 0000 до 1111), тому одна шістнадцяткова цифра — це рівно 4 біти, а дві шістнадцяткові цифри — рівно один байт. Найбільший байт, 11111111, у шістнадцятковій системі — просто FF, а в десятковій — 255, число, з якого не видно бітового шаблону. Саме тому адреси пам’яті, коди кольорів, MAC-адреси та IPv6-адреси записують у hex.

Як перевести шістнадцяткове число в десяткове

Застосуйте той самий метод ваг розрядів зі степенями 16 і замініть літери їхніми значеннями:

Як перевести десяткове число в шістнадцяткове

Переведення з десяткової в шістнадцяткову систему виконується так само, як із десяткової у двійкову, але ділити потрібно на 16. Остачі від 10 до 15 стають літерами від A до F. Ось приклад для 1000:

Ділення Частка Остача
1000 ÷ 16 62 8
62 ÷ 16 3 14 = E
3 ÷ 16 0 3

Прочитавши остачі знизу вгору, отримуємо 1000 = 3E8₁₆. Перевірка: 3 × 256 + 14 × 16 + 8 = 768 + 224 + 8 = 1000.

З двійкової в шістнадцяткову: групуйте біти по чотири

Оскільки одна шістнадцяткова цифра — це чотири біти, переведення з двійкової системи в шістнадцяткову взагалі не потребує обчислень. Розбийте двійкове число на групи по чотири біти (їх називають ніблами), починаючи справа, і замініть кожну групу за цією таблицею:

Двійкова Шістнадцяткова Десяткова Двійкова Шістнадцяткова Десяткова
0000 0 0 1000 8 8
0001 1 1 1001 9 9
0010 2 2 1010 A 10
0011 3 3 1011 B 11
0100 4 4 1100 C 12
0101 5 5 1101 D 13
0110 6 6 1110 E 14
0111 7 7 1111 F 15

Приклади:

Переведення з шістнадцяткової у двійкову працює у зворотному напрямку: замініть кожну шістнадцяткову цифру її чотирма бітами. 3E8 → 0011 1110 1000 → 1111101000 після відкидання початкових нулів.

Коротко про вісімкову систему

Вісімкова система має основу 8 і використовує цифри 0–7. Вона працює як hex, але з групами по три біти, бо 2³ = 8. Найвідоміше її застосування сьогодні — права доступу до файлів в Unix. У chmod 755 кожна цифра — це три біти прав (читання, запис, виконання):

Отже, вісімкове 755 — це бітовий шаблон 111 101 101, тобто 493 у десятковій системі. Калькулятор Chmod перетворює позначені прапорці прав на вісімкове число або показує, які права встановлює число на кшталт 755.

Де трапляються ці перетворення

Префікси: 0b, 0x і 0o

У коді префікс повідомляє компілятору, в якій системі числення записано числовий літерал:

Префікс Основа Приклад Десяткове значення
0b Двійкова (2) 0b1011 11
0o Вісімкова (8) 0o755 493
0x Шістнадцяткова (16) 0x3E8 1000

0x працює майже в усіх мовах. 0b підтримують Python, JavaScript, Java, C# і C++. 0o використовують Python і JavaScript, тоді як C і C++ записують вісімкові числа просто з початковим нулем, тож 0755 у C — це 493, а не 755.

Більшість мов також уміють перетворювати рядки:

# Python
int("1011", 2)      # 11
bin(156)            # '0b10011100'
hex(1000)           # '0x3e8'
int("3E8", 16)      # 1000

// JavaScript
parseInt("1011", 2)     // 11
(1000).toString(16)     // "3e8"
Number("0b1011")        // 11

Одна пастка: у JavaScript parseInt("0b1011") повертає 0, бо parseInt зупиняється на першому символі, який не може прочитати, і не розуміє префікса 0b. Приберіть префікс і передайте основу (radix) окремо, як пояснено в довіднику MDN щодо parseInt.

Кілька слів про від’ємні числа

Комп’ютери зазвичай зберігають від’ємні цілі числа в доповняльному коді. Щоб записати −5 у 8 бітах, почніть із 5 = 00000101, інвертуйте кожен біт і отримайте 11111010, а потім додайте 1: 11111011. Якщо прочитати цей самий шаблон як беззнакове число, це 251 (256 − 5), або FB у hex. Тому той самий байт може означати −5 або 251 залежно від того, чи вважає програма його знаковим.

Таблиця переведення між двійковою, десятковою, вісімковою та шістнадцятковою системами

Десяткова Двійкова Вісімкова Шістнадцяткова
0 0 0 0
1 1 1 1
2 10 2 2
3 11 3 3
4 100 4 4
5 101 5 5
6 110 6 6
7 111 7 7
8 1000 10 8
9 1001 11 9
10 1010 12 A
11 1011 13 B
12 1100 14 C
13 1101 15 D
14 1110 16 E
15 1111 17 F
16 10000 20 10
32 100000 40 20
64 1000000 100 40
100 1100100 144 64
127 1111111 177 7F
128 10000000 200 80
255 11111111 377 FF
256 100000000 400 100

Переводьте числа між будь-якими системами за допомогою двійкового конвертера

Безкоштовний двійковий конвертер працює у вашому браузері. Введіть число й укажіть його основу, і він одразу покаже значення у двійковій, вісімковій, десятковій та шістнадцятковій системах, а також в одній довільній вихідній основі.

Кілька обмежень, про які варто знати: він перетворює лише невід’ємні цілі числа, тож знак мінус або десяткова кома відхиляються; шістнадцятковий результат виводиться малими літерами й без початкових нулів; а рядок «Base64 (64)» — це число в системі з основою 64, що використовує цифри 0–9, a–z, A–Z, + і /, а не текстове кодування Base64.

Часті запитання

Яке найбільше число можна зберегти у 8 бітах?

255, що записується як 11111111 у двійковій системі або FF у шістнадцятковій. Вісім бітів дають 2⁸ = 256 різних комбінацій, які охоплюють числа від 0 до 255. Шістнадцять бітів сягають 65 535, і кожен додатковий біт подвоює діапазон.

Чому програмісти використовують шістнадцяткову систему замість десяткової?

Оскільки кожна шістнадцяткова цифра відповідає рівно чотирьом бітам, бітовий шаблон можна прочитати безпосередньо з шістнадцяткових цифр. Байт завжди складається з двох шістнадцяткових цифр (від 00 до FF). У десятковій системі такої відповідності немає: 255 і 256 у десятковому записі схожі, але у двійковому це 11111111 і 100000000.

Як перевести двійковий дріб у десятковий?

Біти після двійкової коми мають ваги 1/2, 1/4, 1/8 і так далі. Отже, 101.11₂ = 4 + 1 + 0,5 + 0,25 = 5,75. Багато десяткових дробів, наприклад 0,1, не мають точного двійкового представлення, тому в більшості мов програмування 0.1 + 0.2 не дорівнює точно 0.3. Двійковий конвертер працює лише з цілими числами.

Двійковий код — це те саме, що ASCII?

Ні. Двійкова система — це система числення; ASCII — це таблиця, яка призначає кожному символу число. Літера A має код ASCII 65, і це число зберігається як біти 01000001.

Спробуйте безкоштовно: Конвертер основ цілих чисел Безкоштовно, без реєстрації.