Шістнадцяткова система числення

Матеріал з Вікіпедії — вільної енциклопедії.
(Перенаправлено з HEX)
Перейти до навігації Перейти до пошуку

Шістнадцяткова систе́ма чи́слення — це позиційна система числення з основою 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:

5A316 = 3·160+10·161+5·162=
= 3·1+10·16+5·256 = 3+160+1280 = 144310

Переведення чисел із двійкової системи в шістнадцяткову та навпаки[ред. | ред. код]

Для переведення багатозначного числа у шістнадцяткову систему треба розбити його на тетради справа наліво та замінити кожну тетраду відповідною шістнадцятковою цифрою. Для переведення числа з шістнадцяткової системи у двійкову треба замінити кожну його цифру на відповідну тетраду з наведеної нижче таблиці переведення.

Наприклад:

0101101000112 = 0101 1010 0011 = 5A316

Зображення[ред. | ред. код]

Письмове представлення[ред. | ред. код]

Таблиця переведення чисел[ред. | ред. код]

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.[джерело?]

Див. також[ред. | ред. код]

Посилання[ред. | ред. код]