Що таке шістнадцяткова система і чому її так багато використовують в обчисленні? Я знаю, що комп’ютери використовують 0 і 1 для зберігання даних, то як же ми використовуємо шістнадцятковий?
Що таке шістнадцяткова система і чому її так багато використовують в обчисленні? Я знаю, що комп’ютери використовують 0 і 1 для зберігання даних, то як же ми використовуємо шістнадцятковий?
Відповіді:
Шістнадцятковий - це система числення, яка дуже часто зустрічається в обчислювальній техніці. Можливо, ви чули раніше про двійкові , які мають лише 1 і 0.
Люди в основному використовують десяткову (базова 10) система, в якій у нас є 10 цифр:
0, 1, 2, 3, 4, 5, 6, 7, 8 і 9
Хоча комп'ютери не працюють за допомогою десяткової системи. Вони мають бінарний стан (щось є істинним, або хибним) і тому діють у базі 2 (двійкові числа зазвичай мають префікс 0b), при цьому єдині цифри становлять 0 і 1.
У попередні дні використовували восьмикутник (або основу 8). Це було добре, тому що "10" в базі 8 було "0b1000" у двійковій (10 у десятковій - 1010 у двійковій). Октал зазвичай пише "0o" під час запису чисел (але в більшості мов програмування префіксом є лише "0"). Це називається базою 8, оскільки у нас є вісім цифр.
Сьогодні використовується Octal, головним чином при встановленні дозволів в Unix та Linux
З часом ми потребували більш легкого способу представлення більшої кількості, оскільки обчислювальна потужність та простір швидко збільшувалися. Стандартом стало використання шістнадцяткових чи базових 16, тому що 16, як 8 - це потужність 2, що полегшує перетворення цифр у цифрах (див. Цей коментар. Оскільки є 16 цифр, букви використовувались для інші цифри. Також шістнадцятковий зазвичай є префіксом 0x.
Шістнадцяткові числа також корисні, оскільки шістнадцяткове число становить 4 біти (1 восьмерочне число може представляти 2), а отже, два числа в байті. У більшості шестигранних редакторів саме так представлений байт.
У базі 10 маємо 10 цифр. Після 9, що ми робимо? У нас немає цифр. Ми створюємо місце "десятки" зліва від початкового числа, має бути 1, а правий стає 0. Те саме відбувається і в шістнадцятковій:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, 10, 11 тощо
Поки ми не дістаємось до 0x1F, а потім процес повторюється до 0xFF (255 в десятковій) і тоді ми отримуємо 0x100. Більше інформації про підрахунок можна знайти тут .
Ось діаграма, що показує перетворення між десятковими, шістнадцятковими, восьмеричними та двійковими:
0
префікс, а не 0o
для восьмеричних чисел.
Що таке шестидесятична система
Шістнадцяткова система - це система нумерації базової 16, яка використовує 16 цифр ( 0123456789ABCDEF
), на відміну від двійкової, яка використовує 2 ( 01
), або десяткової, яка використовує 10 (0-9). Оскільки у нашій системі є лише 10 цифр цифр, то для опису "цифра №10", "цифра №11" тощо тощо використовуються літери від А до Ф тощо.
чому так багато використовується в обчисленні
16 - потужність 2, яка дозволяє легко перетворювати шістнадцяткові числа у двійкові числа, і, як ви зазначали, "комп'ютери використовують 0 і 1 для зберігання даних". Оскільки кожна цифра зберігає рівно 4 біти даних, шістнадцяткову цифру можна дуже легко перетворити на 4 двійкові цифри (1 біт) і навпаки.
| hex bin | hex bin |
| 0 0000 | 8 1000 |
| 1 0001 | 9 1001 |
| 2 0010 | A 1010 |
| 3 0011 | B 1011 |
| 4 0100 | C 1100 |
| 5 0101 | D 1101 |
| 6 0110 | E 1110 |
| 7 0111 | F 1111 |
як ми використовуємо шістнадцятковий
Це легше, ніж двійкове представлення великої кількості. Всього дві шістнадцяткові цифри можуть представляти 256 різних значень, як у:
dec 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ...
hex 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 ...
Чотири шістнадцяткових цифри можуть представляти 65536 значень тощо. Hex значно полегшує огляд даних за допомогою чогось, що називається шестнадцятковим , оскільки літери, цифри та пунктуація зберігаються у форматі, який відображає кожен символ на число від 0 до 256 (називається ASCII або іноді використовуючи інші кодування). Крім того, багато інших форматів файлів (наприклад, PNG) налаштовані так, що кожен фрагмент інформації, з якої складається файл, містить 256 біт.
Підсумовуючи, 16 - це потужність 2, а 256 - потужність 16. Це робить хорошим способом подання як двійкових чисел, так і тексту або інших даних.
Якщо у вас є число abcd, то це в еквіваленті ((a * + b) + c) + d. Так це:
У шістнадцятковій системі вам потрібно 16 цифр, але у нас є лише десять цифр (0..9). Тож для відсутніх 6 цифр символи A..F використовуються з A = 10, ..., F = 15.
Звичайно, можна подумати і про багато інших систем числення, наприклад, з базою 5 або 7.
Для розрахунку з числами не має значення, яку базу ви використовуєте. Ви можете додавати та множити у двійковій системі, ви можете це робити у десятковій системі, а це можна робити у шістнадцятковій системі. Ми звикли обчислювати в десятковій системі, комп'ютери роблять це у двійковій системі.
Як сказано вище, не має значення, в якій системі числення ви даєте номер. Основне число те саме, змінюється лише представлення. Комп'ютер внутрішньо завжди зберігатиме та використовує (наприклад, обчислює з) числа у двійкових.
То чому програмісти (як я) використовують різні системи числення? Існує дві причини вибору системи числення, виходячи з потужності 2. Перша - це короткість, а друга - хороший вигляд, які біти встановлюються.
Якщо у мене є функція, яка записує вміст буфера на консоль, то я можу написати код, який друкує у десятковій формі, що становить 1 - 3 цифри (десятковий: 0..255). Якщо я записую число у двійковому форматі, то в кінцевому підсумку я отримаю від 1 до 8 цифр (двійковий: 0..11111111). Я також міг би використовувати восьмеричну систему і закінчуватись 1 - 3 цифрами (восьмерична: 0..377) або шістнадцятковою з 1 до 2 цифр (шістнадцятковий: 0..ff).
Це було лише на один байт. Давайте тепер припустимо, що ви хочете написати 32-бітове число:
Як бачите, шістнадцятковий вихід є найкоротшим.
Поширений зразок для зберігання упакованої інформації - використовувати кожен біт в байті окремо. Візьмемо для прикладу атрибути файлів (див. MDSN ). Ви хочете, щоб атрибути "приховано", "архів", "лише для читання", "тимчасово" та інші. Ви можете зберігати кожен атрибут в одному байті, або можете запакувати інформацію в один байт (або кілька байтів), де кожен біт представляє саме один атрибут. Якщо ви подивитесь на dwFlagsAndAttributes у статті MSDN, ви можете побачити, що Windows використовує цю схему.
Перебуваючи на сторінці MSDN, давайте FILE_ATTRIBUTE_ENCRYPTED
для прикладу цей прапор десятковий 16384 і шістнадцятковий 0x4000. Провідний "0x" - це лише умова програміста C для позначення шістнадцяткових чисел, тому ми просто подивимось на 4000. Коли ви хочете дізнатися, які біти встановлені, вам потрібно спочатку перетворити 16384 у бінарні - нічого, що ви могли б зазвичай роблять з розумовою арифметикою. Але візьмемо шістнадцятковий 4000. Це досить просто. 16 - 2 * 4, тому кожне шістнадцяткове число - це рівно 4 біти. Для цього ми просто перетворюємо 4 у двійковий 0100, а нулі - у бінарний 0000, і ми закінчуємо.
Часто мова йде не про окремі біти, але програмісти прагнуть вирівняти речі до повноважень 2. Ми любимо завантажувати програми не до випадкової адреси, а до адреси з 16 найменш значущими бітами, встановленими на нуль. Таким чином, якщо у вас є адреса 0x12345678, ви можете легко побачити, що ця адреса належить до програми, завантаженої до 0x1234, а не до тієї, що завантажена на 0x03810000.
Це питання смаку. Якщо ви прямо хочете побачити біти бінарних, можливо, буде добре. Для довгих чисел бінарне може бути засмучуючим, якщо вам доведеться порахувати цифри, щоб побачити, чи встановлено біт 23 або біт 24. Це простіше з шістнадцятковим, оскільки кожна цифра представляє 4 біти, тому у вас менше рахунку. Особисто я рідко використовую восьмикутник. Це дуже рідко.
База 32 - потужність 2, це чудово. Але вам знадобиться 32 цифри, як 0..9, A..V. Це набагато більше цифр, які слід запам’ятати (чи можна легко помітити, на яке число відповідатиме “S”?). Ще одне застереження полягає в тому, що за допомогою бази 32 ви втрачаєте приємну особливість, що дві шістнадцяткові цифри - це рівно один байт, що дуже зручно, якщо ви подивитеся на вміст пам'яті! Також із базовою базою 32 вам знадобиться дві цифри для відображення значень, які може мати один байт. Для значення 32 біт вам потрібно лише 7 цифр замість 8 шістнадцяткових цифр, але це не так сильно, щоб жити з недоліками базової 32 системи.
Різні системи представлення чисел, що застосовуються сьогодні, є (= включають):
двійкові, вісімкові, десяткові та шістнадцяткові.
Що вибрати, часто залежить від простоти використання для виконання завдання.
двійковий використовується в комп'ютерних системах і цифрових технологіях взагалі, оскільки його легко представити в електроніці; Функції для номерів base-2 легко побудувати, як це представлення увімкнення / вимкнення, істинного / помилкового або будь-якої іншої подібної повторюваної інформації про два стану.
octal приємно мати, якщо є групи з трьох двійкових цифр, наприклад, як це відбувається в налаштуваннях дозволу в Unix / Linux.
на мить пропускаючи десятковий знак, шістнадцятковий приємний так само, як вісімковий, але для чотирьох двійкових цифр, і той факт, що 8 біт, один байт, добре вписується у дві шістнадцяткові цифри. ( = відповідь )
З цього випливає, що навіть 8-бітні групи в комп'ютері легко записуються, представляються та розуміються - тобто; дуже зручний у щоденному використанні при написанні програмного забезпечення, обробці даних (наприклад, значення кольорів rgb у HTML / CSS), формуванні структур даних та нічого іншого.
десятковий . Можна було здогадатися, що десяткова система розвинулась із того, що у нас десять пальців і пальців. Однозначна цифра представляє кількість підрахованих предметів, по одному на кожен палець до максимум десяти.
Вони являють собою системи числення з базою:
2, 8, 10 і 16.
Як правило, база повідомляє, скільки однозначних "предметів" ви можете порахувати, наприклад, двійкові мають два, десятковий - десять.
Оскільки в шістнадцятковій кількості є 16 одноцифрових елементів, система вимагає 16 "цифр", тому використовуючи 0-9 та af (6 додаткових, порівняно з десятковою), де "a" дорівнює 10, а "f" дорівнює 15 у десятковій системі.
Щоб продовжити загальний режим: будь-яка база 2 або вище працює так само, як і будь-що інше, якщо у вас є хороше одноцифрове представлення.
Числа в десятковій формі формуються:
... d * 10³ + c * 10² + b * 10¹ + a * 10⁰
для десяткового числа "dcba" - з d, c, b, a, вибране з 0123456789
Тепер змініть це на:
... d * база³ + c * база² + b * база¹ + а * база⁰
і у вас є більш загальна форма, яка показує, як працює будь-яка база 2 або вище;
наприклад, п'ятизначна база 5 може бути такою ж зручною, як і будь-яка з інших вище, або чому не 12-значна (один десяток) система за час (12 годин = "10" база 12, причому перший "десятковий" говорить про те, який 1/12 [5 хвилин] години)
Примітка: ⁰¹²³ - надпис 0123, якщо на екрані відображається щось інше