Шістнадцяткова систе́ма чи́слення — це позиційна система числення з основою 16, кожне число в якій записується за допомогою 16-ти символів. Арабські цифри від 0 до 9 відповідають значенням від нуля до дев'яти, а 6 літер латинської абетки A, B, C, D, E, F відповідають значенням від десяти до п'ятнадцяти. Шістнадцяткову систему числення широко використовують розробники комп'ютерів та програмісти.
Цю систему часто називають також Hex (початкові літери англ. hexadecimal — шістнадцятковий).
Декілька різних позначень використовують для позначення шістнадцяткових констант у комп'ютерних мовах. Префікс «0x» широко поширений через його використання в Unix і C (і пов'язаних із ними операційних систем і мов). Крім того, деякі автори позначають шістнадцяткові значення, використовуючи суфікс чи індекс. Наприклад, можна було б написати 0x2AF3 або 2AF316, залежно від вибору способу позначень.
Як приклад, для шістнадцяткового числа 2AF316 знайдемо відповідне число в десятковій системі числення. Зауважимо, що 2AF316 дорівнює сумі (200016 + A0016 + F016 + 316), якщо розкласти число на послідовність позиційних значень елементів числа, то перетворення кожного елемента в десяткове значення, можна описати так: (216 × 163) + (A16 × 162) + (F16 × 161) + (316 × 160) =
(2 × 4096) + (10 × 256) + (15 × 16) + (3 × 1) = 10995.
Кожна шістнадцяткова цифра представляється чотирма бінарними цифрами (бітами), і основне застосування шістнадцяткового запису — це зручний запис двійкового коду. Одна шістнадцяткова цифра є ніблом, який є половиною з октету або байту (8 біт). Наприклад, значення байт лежить в діапазоні від 0 до 255 (в десяткових числах), але може бути більш зручно представити у вигляді двох шістнадцяткових цифр в діапазоні від 00 до FF. Шістнадцяткову систему також широко використовують для представлення адресації пам'яті комп'ютера.
Використання
Найбільш широке застосування шістнадцятковій системі числення — це коди помилок програмних продуктів, наприклад, операційної системи. Числа, закладені в цих кодах, стандартизовані. Маючи спеціальну таблицю, завжди можна визначити, що саме означає та чи інша помилка.
Також часто використовують у низькорівневому програмуванні та комп'ютерній документації, оскільки в сучасних комп'ютерах мінімальною одиницею пам'яті є 8-бітний байт, значення якого зручно записувати двома шістнадцятковими цифрами. Таке використання почалося з системи IBM/360, де вся документація використовувала саме таку систему числення, у той час, коли в документації інших комп'ютерних системах того часу (навіть 8-бітними символами, як, наприклад, PDP-11) використовували вісімкову систему числення.
Багато програмістів використовують шістнадцяткову систему числення і при роботі з мовами високого рівня, тому що числа в цій системі за допомогою спеціальної таблиці відповідності легко переводяться в двійкову систему, на якій базується робота всієї цифрової техніки. Будь-яка інформація в комп'ютері, хай то музичний файл або текстовий документ, після трансляції представлена послідовністю вихідного двійкового коду, а його зручніше переглядати представленим символами шістнадцяткової системи.
Також, можливість переглянути програму в шістнадцятковому коді дозволяє налагодити її, внести зміни, а зловмисники цей підхід використовують для злому програм.
В стандарті Юнікода номер символу заведено записувати в шістнадцятковому виді, використовуючи не менш 4 цифр (за необхідності — з провідними нулями).
Переведення чисел з одної системи числення в іншу
Переведення чисел з шістнадцяткової системи в десяткову
Для переведення шістнадцяткового числа в десяткове необхідно це число представити у вигляді суми добутків ступенів основи шістнадцяткової системи числення на відповідні цифри в розрядах шістнадцяткового числа.
Наприклад, треба перевести шістнадцяткове число 5A3 в десяткове. В цьому числі 3 цифри. Відповідно до наданого правила представимо його у вигляді суми ступенів з основою 16:
{{{1}}}
Переведення чисел із двійкової системи в шістнадцяткову та навпаки
Для переведення багатозначного числа у шістнадцяткову систему треба розбити його на тетради справа наліво та замінити кожну тетраду відповідною шістнадцятковою цифрою. Для переведення числа з шістнадцяткової системи у двійкову треба замінити кожну його цифру на відповідну тетраду з наведеної нижче таблиці переведення.
Наприклад:
{{{1}}}
Зображення
Письмове представлення
Таблиця переведення чисел
|
|
|
|
|
|
|
|
|
|
|
|
|
0hex |
= |
0dec |
= |
0oct |
|
0 |
0 |
0 |
0 |
|
|
1hex |
= |
1dec |
= |
1oct |
|
0 |
0 |
0 |
1 |
|
|
2hex |
= |
2dec |
= |
2oct |
|
0 |
0 |
1 |
0 |
|
|
3hex |
= |
3dec |
= |
3oct |
|
0 |
0 |
1 |
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4hex |
= |
4dec |
= |
4oct |
|
0 |
1 |
0 |
0 |
|
|
5hex |
= |
5dec |
= |
5oct |
|
0 |
1 |
0 |
1 |
|
|
6hex |
= |
6dec |
= |
6oct |
|
0 |
1 |
1 |
0 |
|
|
7hex |
= |
7dec |
= |
7oct |
|
0 |
1 |
1 |
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8hex |
= |
8dec |
= |
10oct |
|
1 |
0 |
0 |
0 |
|
|
9hex |
= |
9dec |
= |
11oct |
|
1 |
0 |
0 |
1 |
|
|
Ahex |
= |
10dec |
= |
12oct |
|
1 |
0 |
1 |
0 |
|
|
Bhex |
= |
11dec |
= |
13oct |
|
1 |
0 |
1 |
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chex |
= |
12dec |
= |
14oct |
|
1 |
1 |
0 |
0 |
|
|
Dhex |
= |
13dec |
= |
15oct |
|
1 |
1 |
0 |
1 |
|
|
Ehex |
= |
14dec |
= |
16oct |
|
1 |
1 |
1 |
0 |
|
|
Fhex |
= |
15dec |
= |
17oct |
|
1 |
1 |
1 |
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
Запис числа формується за загальним принципом: на n-й позиції (справа наліво від 0) стоїть цифра, що відповідає кількості n-х степенів шістнадцяти у цьому числі. Наприклад, число записане в десятковій системі як 1000, в hex записується як 3E8, де:
3x162 + 14x161 + 8x160 = 768 + 224 + 8 = 1000.
Шістнадцяткова система числення широко вживана в інформатиці, оскільки значення кожного байту можна записати у вигляді двох цифр шістнадцяткової системи. Таким чином значення послідовних байтів можна подати у вигляді списку двозначних чисел. Водночас запис 4 бітів можна подати однією шістнадцятковою цифрою.
В математиці числа в не десяткових системах позначуються нижнім індексом, що визначає основу системи. Наприклад, 1016 = 1610. В інформатиці прийняті інші форми запису. В різних мовах програмування шістнадцятковий запис виглядає так:
- C, C++, Java — використовують префікс 0x (нуль та ікс) напр. 0x102f, а в текстових послідовностях \x, напр. «\x2f»
- Деякі версії Асемблера — за числом ставлять h, наприклад 102fh. При цьому, якщо число починається не з десяткової цифри, то спереду ставиться «0» (нуль): 0FFh (25510)
- Інші асемблери (AT&T, Motorola), а також Паскаль і деякі версії Бейсіку використовують префікс $, наприклад $102f
- Інші версії Бейсіку використовують для позначення шістнадцяткових цифр комбінацію «&h». Наприклад, &h5A3.
- HTML — кольори RGB (Red — Червоний, Green — Зелений, Blue — Синій) записується як 3 двозначні числа hex від 0 до FF(25510) з попереднім знаком #, наприклад рожевий — #FF8080, сірий — #808080, чорний — #000000. Цей запис стосується 24-бітного кольору, який приписують тому чи іншому графічному елементу документа HTML.
Ранні письмові представлення
Використання букви від А до F, щоб представляти цифри вище 9 не було загальноприйнятим в ранній історії комп'ютерів. Протягом 1950-х років, деякі пристрої, використовували цифри від 0 до 5 з макроном, щоб позначити цифри 10-15 як 0, 1, 2, 3, 4 та 5.
- Комп'ютери SWAC та «Bendix G-15» використовували букви нижнього регістру u, v, w, x, y та z для значень від 10 до 15.
- «Librascope LGP-30» використовували літери F, G, J, K, Q та W.
- Комп'ютери «Illiac I» використовували літери K, S, N, J, F та L.
- Брюс Алан Мартін з Брукгейвенської національної лабораторії вважав вибір A-F «безглуздим» і в 1968 редактором САСМ був запропонований абсолютно новий набір символів на основі бітових місцеположень, які не отримали поширення.
- Радянські програмовані калькулятори Б3-34 і аналогічні використовували символи «-», «L», «C», «Г», «Е», "" (пробіл) на їх дисплеях.
Словесні й цифрові представлення
Немає ніяких традиційних чисел, щоб представити величини від десяти до п'ятнадцяти — літери використані як заміна і більшості європейських мов бракує не десяткових найменувань для вказівки цифр вище десяти. Хоча англійська має назви для кількох недесяткових ступенів, ніяке англійське слово не описує шістнадцяткові ступені. Деякі люди читають шістнадцяткову цифру подібно до телефонного номера: 4DA — «four-dee-ay». Однак, буква А звучить подібно «восьми», і D може бути помилково прийнятою за суфікс «-ty». Інші люди уникають замішання, користуючись фонетичним алфавітом НАТО.
Історія
Слово шістнадцятковий складається з hexa-, походить від грецького έξ (hex), що означає «шість», і -decimal, що походить від латинського слова «десятий». Сама рання дата, завірення цього терміну в Інтернеті є 1954, тим самим поміщаючи його в категорію міжнародного наукового словника (ISV). Зазвичай в ISV змішані грецькі й латинські форми, що вільно поєднуються. Слово «шістдесяткова» (sexagesimal) зберігає латинську приставку. Дональд Кнут вказав, що етимологічно правильний термін є «senidenary» (або, можливо, sedenary), від латинського терміна для згрупованих на 16. (Терміни бінарні, потрійних і четверні з того ж латинського будівництва, і етимологічно правильні умови для десяткової й вісімкової арифметики є десятеричний та вісімковий відповідно.)
Використання в китайській культурі
Традиційні китайські одиниці ваги базувалися на 16. Наприклад, один Чжин (斤) в старій системі становить шістнадцять Таеля. Суаньпань (китайська абака) може бути використаний для виконання шістнадцяткових обчислень.
Цікаві факти
- У фільмі «Марсіянин» саме цю систему головний герой використав для зв'язку з наземним центром керування NASA.[джерело?]
Див. також
Посилання