Що таке шестидесятична система?


13

Що таке шістнадцяткова система і чому її так багато використовують в обчисленні? Я знаю, що комп’ютери використовують 0 і 1 для зберігання даних, то як же ми використовуємо шістнадцятковий?


13
Якщо це не тема, як таке основне запитання не є повторюваним через 5 років після початку роботи Super User?
Пітер Мортенсен

3
@PeterMortensen Навіть дивніше, його навіть не запитували на жодному із сестринських сайтів, принаймні, не те, що я можу знайти.
Nzall

9
Можливо, його не потрібно запитувати, оскільки у Вікіпедії є досить гарна відповідь: en.wikipedia.org/wiki/Hexadecimal
Пірс Майєрс

4
Чому так багато оновлень?
Ві.

Відповіді:


31

Шістнадцятковий - це система числення, яка дуже часто зустрічається в обчислювальній техніці. Можливо, ви чули раніше про двійкові , які мають лише 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. Більше інформації про підрахунок можна знайти тут .

Ось діаграма, що показує перетворення між десятковими, шістнадцятковими, восьмеричними та двійковими: Шестидесятична діаграма перетворення


21
Основна перевага полягає в тому, що оскільки 16 - це сила 2, ви можете робити перерахунки в цифрах.
TRiG

2
Зауважте, що багато мов використовують 0префікс, а не 0oдля восьмеричних чисел.
ysap

2
Ваша примітка про те, що 16 є кратним 2, неправильно скопійована з коментаря TRiG. Бути кратним не є відповідним відношенням.
Райан Рейх

2
@ justcool393, можливо, варто згадати, що назва того, що ви називаєте "базовою 10", насправді є "десятковою". Це може допомогти зрозуміти взаємозв'язок між базою 8 (восьмерична), базовою 10 (десяткова) та базовою 16 (шістнадцятковою).
HalosGhost

3
Arrrg. Кожна база - це 10! stale.soup.io/post/114652207/every-base-is-base-10
woliveirajr

4

Що таке шестидесятична система

Шістнадцяткова система - це система нумерації базової 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. Це робить хорошим способом подання як двійкових чисел, так і тексту або інших даних.


2

Що таке шестидесятична система?

Якщо у вас є число abcd, то це в еквіваленті ((a * + b) + c) + d. Так це:

  • abcd (бінарний) = ((a * 2 + b) * 2 + c) * 2 + d
  • abcd (octal) = ((a * 8 + b) * 8 + c) * 8 + d
  • abcd (десятковий) = ((a * 10 + b) * 10 + c) * 10 + d
  • abcd (шістнадцятковий) = ((a * 16 + b) * 16 + c) * 16 + 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-бітове число:

  • двійкові: 0..1111111111111111111111111111111111
  • вісімковий: 0..377777777777
  • десяткова: 4294967295
  • шістнадцятковий: 0..ffffffffff

Як бачите, шістнадцятковий вихід є найкоротшим.

Побачивши шматочки

Поширений зразок для зберігання упакованої інформації - використовувати кожен біт в байті окремо. Візьмемо для прикладу атрибути файлів (див. 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?

База 32 - потужність 2, це чудово. Але вам знадобиться 32 цифри, як 0..9, A..V. Це набагато більше цифр, які слід запам’ятати (чи можна легко помітити, на яке число відповідатиме “S”?). Ще одне застереження полягає в тому, що за допомогою бази 32 ви втрачаєте приємну особливість, що дві шістнадцяткові цифри - це рівно один байт, що дуже зручно, якщо ви подивитеся на вміст пам'яті! Також із базовою базою 32 вам знадобиться дві цифри для відображення значень, які може мати один байт. Для значення 32 біт вам потрібно лише 7 цифр замість 8 шістнадцяткових цифр, але це не так сильно, щоб жити з недоліками базової 32 системи.


1

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

двійковий використовується в комп'ютерних системах і цифрових технологіях взагалі, оскільки його легко представити в електроніці; Функції для номерів 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, якщо на екрані відображається щось інше


В даний час це може бути «заглушкою» того, що воно насправді може стати.
Ханну
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.