Як перевести двійкове число в десяткове (і 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³2²2¹2⁰
Вага розряду1286432168421

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

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

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

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

Біт11010110
Вага розряду1286432168421
Біт × вага128640160420

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 ÷ 2780
78 ÷ 2390
39 ÷ 2191
19 ÷ 291
9 ÷ 241
4 ÷ 220
2 ÷ 210
1 ÷ 201

Читаючи знизу вгору, отримуємо 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 ÷ 16628
62 ÷ 16314 = E
3 ÷ 1603

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

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

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

ДвійковаШістнадцятковаДесятковаДвійковаШістнадцятковаДесяткова
000000100088
000111100199
0010221010A10
0011331011B11
0100441100C12
0101551101D13
0110661110E14
0111771111F15

Приклади:

Переведення з шістнадцяткової у двійкову працює у зворотному напрямку: замініть кожну шістнадцяткову цифру її чотирма бітами. 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)0b101111
0oВісімкова (8)0o755493
0xШістнадцяткова (16)0x3E81000

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 залежно від того, чи вважає програма його знаковим.

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

ДесятковаДвійковаВісімковаШістнадцяткова
0000
1111
21022
31133
410044
510155
611066
711177
81000108
91001119
10101012A
11101113B
12110014C
13110115D
14111016E
15111117F
16100002010
321000004020
64100000010040
100110010014464
12711111111777F
1281000000020080
25511111111377FF
256100000000400100

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

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

Кілька обмежень, про які варто знати: він перетворює лише невід’ємні цілі числа, тож знак мінус або десяткова кома відхиляються; шістнадцятковий результат виводиться малими літерами й без початкових нулів; а рядок «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.

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