Навіщо використовувати інші бази чисел при програмуванні


35

Ми з моїми співробітниками роздумували над тим, щоб зрозуміти, чому хто-небудь піде зі свого шляху, щоб запрограмувати номери в базі, відмінній від бази 10.

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

Будь-які думки?


6
Чи є у вас конкретний приклад, який порушив це питання? Речі, які знаходяться в базі-2 або в базовій-16, очевидно, мають свої переваги, оскільки комп'ютер простіше зрозуміти.
KDiTraglia

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

12
@JMD - просимо співпрацювати з модераторами, щоб видалити одну з двох перехресних публікацій і розмістити її тут, в P.SE. Перехресне повідомлення на сайтах нахмуриться. Моди можуть замість вас мігрувати питання.

10
@JMD - Перехресне повідомлення - це все-таки не те, що слід робити. Для таких питань існує процес міграції, якщо це необхідно .
Одід

2
@JMD Не перехрещуйте повідомлення, питання, яке підходить для більш ніж одного сайту, є вкрай рідкісним. Цього разу, наприклад, ваше запитання було поза темою щодо переповнення стека. Але навіть якщо ваше питання підходило для обох сайтів, покупки вашого питання навколо сайтів, як правило, нахмурені. Ми всі волонтерствуємо тут, ви могли б принаймні почекати деякий час, щоб оцінити відповіді, які ви отримували на стеку Overflow, перш ніж розміщувати перехресні повідомлення.
янніс

Відповіді:


59

Звичайна причина для написання цифр у коді, крім основної 10, полягає в тому, що ви трохи подвійні.

Щоб вибрати приклад в C (тому що, якщо C хороший для чого-небудь, це добре для подвійного скручування), скажімо, якийсь формат низького рівня кодує 2-бітове і 6-бітове число в байті xx yyyyyy::

main() {
    unsigned char codevalue = 0x94; // 10 010100
    printf("x=%d, y=%d\n", (codevalue & 0xc0) >> 6, (codevalue & 0x3f));
}

виробляє

x=2, y=20

За такої обставини записувати константи в шістнадцятковому розмірі менш заплутано, ніж писати їх у десятковій формі, оскільки одна шістнадцяткова цифра чітко відповідає чотирьом бітам (половина байтів; одна «прикування»), а два - один байт: число 0x3fмає всі біти встановлено в нижній нібі, і два біти встановлені у високому кусачці.

Ви також можете написати цей другий рядок у восьмериці:

printf("x=%d, y=%d\n", (codevalue & 0300) >> 6, (codevalue & 077));

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


Іншим прикладом може бути використання "магічного числа" 0xDEADBEEF. Дивіться цей пост stackoverflow.com/questions/5907614/0xdeadbeef-vs-null
Etsitpab Nioliv

45

Основна причина, по якій я використовую різні бази, - це коли я дбаю про шматочки.

Це набагато простіше читати

int mask=0xFF;
byte bottom_byte = value & mask;

ніж

int mask=255;
byte bottom_byte = value & mask;

Або зобразити щось складніше

int mask=0xFF00FF00;
int top_bytes_by_word = value & mask;

у порівнянні з

int mask=4278255360; //can you say magic number!? 
int top_bytes_by_word = value & mask;

Тут дуже зрозуміло, у чому полягає наміри з шістнадцятковими прикладами, тому що в основному гекс є лише більш компактною формою бінарних даних ... На відміну від цього, база-10 (те, що ми використовуємо) не відповідає майже бінарному.

0xFF = b11111111 = 255
0xFFFF = b1111111111111111 = 65536
0xF0F0 = b1111000011110000 = 61680

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


2
Octal взагалі не рідкість, 0 - восьмерична :) (побачила, що десь у мережі Stack Exchange зараз її не можна знайти).
Герріт

2
@Earlz: люди з великою кількістю пальців. :-)
Брайан Оуклі

3
26 x 2 + 10 = Усі великі і малі літери та всі цифри. Насправді не так незвично. Я також бачив використану Base 36, яка є просто невідчутною до регістру версією.
Даррель Гофман

3
@vasile: Існує 60 хвилин за годину і 60 секунд за хвилину, тому що люди використовували системи base-60, а не навпаки. Я сподіваюся, ви не вірите, що в природі є щось, що говорить, що за годину має бути 60 хвилин!
Жорен

1
так, вони читали це в зірках, і вони використовували базу-60, оскільки вимірювали час. з 360 днями (= 6x60) на рік, не так божевільно вимірювати час у базі-60.
ytg

8

Як ви, напевно, знаєте, комп’ютери базуються на двійковому - це база 2.

Це легко конвертувати між підставою 2 і 4, 8 і 16 (і аналогічної упаковкою 2), і збереженням цього перекладу в вихідному коді може змусити працювати з цифрами набагато легше розмірковувати про.

Для мов низького рівня, таких як Асамблея та С, це може бути переведено безпосередньо на операції з процесором (наприклад, зміщення бітів для поділу та множення), тобто використання цих баз чисел закінчується набагато швидшим кодом.

Крім того, не всі операції є числовими операціями - є бітові карти, де вам потрібно попрямувати біти безпосередньо - використання базової 2 або однієї з кратних для цього операцій значно спрощує операції.

Якщо ви хочете дізнатися більше, рекомендую прочитати Код Чарльза Петцольда .


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

1
Використання шістнадцяткових значень на C не означає швидших програм. Компілятору неважливо, яку базу ви використовуєте.
Чарльз Сальвія

5
Незалежно від того, на якій базі написана програма, компілятор переводить її у двійковий під час компіляції. Інструкція по збірці ідентична.
Карл Білефельдт

2
Фактично комп’ютерні комп’ютери засновані на трійчастому булінгу: істина, помилка та "файл не знайдено"
Мартін Бекетт


4

Поза вузькоспеціалізованими програмами досить рідко використовувати бази, окрім 10, 16 або 2.

База 16 (шістнадцятковий) корисна просто тому, що весь діапазон байтів (0-255) можна представити двома цифрами (0x00-0xFF), що може значно спростити роботу з неочищеними шістнадцятковими дампами або бінарними даними. Шістнадцятковий також корисний при використанні бітових масок з побітними операторами, оскільки двоцифрова байтова відповідність допомагає читати.

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

База-8 (восьмерична) також іноді використовується через дозволи файлів UNIX. Крім цього, досить рідко використовувати бази, крім 10, поза межами вузькоспеціалізованих математичних контекстів.


Октал часто використовується для визначення знаків символів, а іноді для скидання двійкових даних.
Калеб

3

Найпоширеніша обґрунтована причина використання інших баз пов'язана з легкістю перетворення на базу 2: тривіально конвертувати число базового 8 або базового 16 у бінарне без використання калькулятора, запам'ятовуючи коротку таблицю з восьми або шістнадцяти номери:

 0000 0     0001 1     0010 2     0011 3
 0100 4     0101 5     0110 6     0111 7

 1000 8     1001 9     1010 A     1011 B
 1100 C     1101 D     1110 E     1111 F

Це відкриває кілька можливостей:

  • Коли число являє собою склад значущих двійкових чисел, ви можете визначити окремі компоненти без комп'ютера. Наприклад, якщо 24-розрядне число являє собою колір у RGB, тривіально сказати, що 0xFF00FFце пурпурний (червоний + синій); завдання набагато складніше, коли вас представляють16711935
  • Коли число є бітною маскою, то практичніше записувати його як компактне шістнадцяткове число, а не набагато довше двійкове число
  • Деякі архітектури вийшли з ладу, щоб зробити їх двійковий код легким для читання при друкуванні як восьмеричні числа. PDP-11 була однією з таких систем: найзначніший біт дозволив вам розповісти 8-бітні операції з 16-бітних; останні два восьмі групи дозволять вам розповісти про два регістри, які беруть участь в операції тощо. Я знав кількох людей, які могли читати бінарний код PDP-11 з екрана без розбиральника, але їм був потрібен машинний код, щоб він був надрукований у восьмеричній системі.

2

Комп'ютер (або точніше компілятор) насправді зовсім не цікавить, яку базу номерів ви використовуєте у вихідному коді. Найчастіше використовувані мови програмування підтримують основи 8 (восьмеричний), 10 (десятковий) та 16 (шістнадцятковий) безпосередньо. Деякі також підтримують пряму підтримку базових 2 (двійкових) чисел. Спеціалізовані мови можуть також підтримувати інші бази чисел. (Під "безпосередньою підтримкою" я маю на увазі, що вони дозволяють вводити цифри в цю базу, не вдаючись до математичних хитрощів, таких як бітшифтинг, множення, ділення і т. Д. У самому вихідному коді. Наприклад, C безпосередньо підтримує базу-16 з її0xпрефікс числа та звичайний шістнадцятковий набір цифр 0123456789ABCDEF. Тепер такі хитрощі можуть бути корисними, щоб число було простіше зрозуміти в контексті, але поки ви можете висловити одне і те ж число без них, робити це - чи ні - це лише зручність.)

Врешті-решт, це є несуттєвим. Скажімо, у вас є таке твердження наступне:

int n = 10;

Наміром є створення цілої змінної та ініціалізація її з десятковою цифрою 10. Що бачить комп'ютер?

i  n  t     n     =     1  0  ;
69 6e 74 20 6e 20 3d 20 31 30 3b (ASCII, hex)

Компілятор буде цекенізувати це і зрозуміє, що ви оголошуєте змінну типу intз іменем nта призначите їй якесь початкове значення. Але яка це цінність?

Для комп'ютера та ігноруючи проблеми впорядкування та вирівнювання байтів, вхід для початкового значення змінної є 0x31 0x30. Чи означає це, що початкове значення 0x3130 (12592 в базі 10)? Звичайно, ні. Мовний аналізатор повинен постійно читати файл у кодованому символі, що використовується, тому він читає, 1 0за яким слід термінатор оператора. Оскільки в цій мовній базі 10 передбачається, це читається (назад) як "0, 1 десяток, кінець". Тобто значення 10 десятків.

Якщо ми вказали значення у шістнадцятковому значенні, а наша мова використовує, 0xщоб вказати, що наступне значення є шістнадцятковим, то отримуємо таке:

i  n  t     n     =     0  x  1  0  ;
69 6e 74 20 6e 20 3d 20 30 78 31 30 3b (ASCII, hex)

Компілятор бачить 0x(0x30 0x78) і визнає, що як префікс base-16, тому шукає дійсне число base-16 після нього. Доти, доки термінатор оператора не зчитує 10. Це означає 0 "ті", 1 "шістдесят", що дорівнює 16 в базі 10. Або 00010000 в базі 2. Або як би ви хотіли це представляти.

У будь-якому випадку і ігноруючи оптимізацію заради простоти, компілятор виділяє достатньо місця для зберігання значення intзмінної типу і розміщує там значення, яке воно читає з вихідного коду, у якусь тимчасову змінну утримування. Потім він (можливо набагато пізніше) записує отримані бінарні значення в файл об'єктного коду.

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

Підсумок: не хвилюйтеся з цього приводу. Запишіть числа в базу, яку підтримує обрана вами мова програмування і має сенс для того, як число буде використовуватися та / або читатися. Ви витратили набагато більше часу, читаючи цю відповідь, ніж ви коли-небудь відновитеся за часом компіляції, розуміючи, яку базу номерів використовувати у вихідному коді. ;)


1

чому хто-небудь пішов зі шляху, щоб запрограмувати номери в іншій, ніж базовій 10.

Ось кілька причин, які вже не з'явилися ...

x00 - API деяких ОС і апаратних пристроїв очікує, що аргументи будуть шістнадцятковими / двійковими. Коли ви кодуєте такі API, простіше використовувати номери в тому ж форматі, який очікує API, а не перетворювати його між різними базами. Наприклад, надіслати кінець байту повідомлення на сервер або надіслати повідомлення, щоб закрити з'єднання з каналом зв'язку.

x01 - Ви, можливо, хочете, щоб ваша програма представляла символи, недоступні на певних клавіатурах, таких як знак авторських прав (\ u00a9).

x02 - щоб деякі константи / літерали зберігалися (візуально) в різних налаштуваннях культури, особливо коли вихідний код / ​​файли переміщуються серед розробників з різними локальними налаштуваннями.

x03 - Щоб їх код виглядав заплутаним і складним - Добре, що C # не підтримує восьмеричні константи!


1

Ключовим питанням є представлення одного слова розміром з комп’ютером розумним чином. 6502 був 8-бітовим процесором. 4004 був 4-розрядним процесором.

У роботі з 4 або 8 бітним числом добре працює. 4-бітове число - це один шістнадцятковий символ. 8-бітове число (байт) - це дві шістнадцяткові цифри. Системи, які мають потужність слова розміром 2, є загальноприйнятим сьогодні стандартом - 16 біт, 32 біт, 64 біт. Усі вони поділяються на 4, щоб представити їх як шістнадцятковий.

Восьмі (база 8) використовувались у системах, де розмір слів становив 12, 24 або 36. Ці PDP8, IBM Mainframe та ICL були використані 1900 днів. Ці слова легше були представлені за допомогою октетів, а не обмеженого діапазону шістнадцяткових (так, вони також поділяються на 4).

Мабуть, також було економія коштів із використанням базової нумерації 8. Представляючи 12 біт у BCD, перша цифра може бути лише 0-4, але друга, третя та четверта можуть бути 0-9. Якщо це було зроблено як шістнадцятковий, один має 3 шістнадцяткових символів, але кожен має 16 можливих значень. Дешевше було виготовити ніксі-тюбик, який мав лише 0-7, ніж той, який мав 0-9 (з додатковою логікою для BCD) або 0-F для шістнадцяткової.

Сьогодні ще бачимо восьмерику з дозволами на файли Unix (755, 644), де кожен власник, група та світ мають 3 біти, що представляють дозволи.


У світі математики час від часу можна робити якісь дивні речі з різними основами. Наприклад, слабка послідовність Goodstein від проектного еулера 396 ... або щось простіше з паліндромними числами . В основі N є властивість числа, що число, кратне N - 1 , матиме свої цифри до кратного N - 1 . Фуртермор, якщо N - 1 є ідеальним квадратом, ця властивість також існує для sqrt ( N - 1 ). Це має деякі додатки у певних математичних задачах.


1
Октал був тому, що PDP мав 9/18 біт, октальне число являє собою 3 біт, тож якщо байт ділиться на 3, це має багато сенсу
Мартін Бекетт

1
Octal також використовувався в деяких 16-бітових системах (особливо це стосується PDP-11), оскільки 15 - кількість бітів, крім біта знака - добре розділяється на 3. Він широко використовувався в оригінальній операційній системі UNIX (наприклад, "od" - це стандартний інструмент для скидання бінарних файлів, а його типовим форматом є 16-бітний восьмеричний, а не 8-бітний шістнадцятковий), а не лише для дозволів. Також може бути доречним, що набір інструкцій PDP-11 мав два 6-бітних операндних поля.
Випадково832

Октал також використовувався тому, що він міг відображатись за технологією у той час. Некси трубки, хтось? Або інші 0-9 дисплеї? Минуло деякий час, щоб з'явилися екрани AF.
Джеремі Дж Старчер

1

У фінансовій галузі існує ідентифікаційна схема, яка фактично є базовою 36 . Він використовує цифри 0-9 та літери BZ для відображення цифр, що оцінюються 0-35. Він пропускає голосні звуки, щоб запобігти генеруванню будь-яких неприємних імен.

Однак це не ідеально. Був час, коли одна нещасна компанія мала ідентифікатор B000BZ.


1

Причина №1: тому що всі числа на рівні ланцюга представлені в базі-2 (електричний вимикач увімкнено або вимкнено). Причина №2: оскільки на одному рівні вище, ніж фактичні схеми, біти групуються в байти, і байти можуть бути легко представлені у вигляді двох шістнадцяткових цифр, коли знадобиться 3 десяткових цифри (і деяка перевірка), щоб представити всі можливі значення байт.

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


1

Одна із областей, де дуже часто використовуються базові 16 (шістнадцяткові) цифри, полягає у визначенні кольору, особливо при використанні HTML / CSS для Інтернету. Кольори, які ми використовуємо на цифрових дисплеях, визначаються за допомогою комбінації 3 значень інтенсивності для 3 "базових" кольорів (RGB - червоний, зелений, синій), які поєднуються разом для створення будь-якого з 16 мільйонів кольорів, що відображаються (використовуючи 24-бітний колір ).

Наприклад, зелена повна інтенсивність у шістнадцятковій формі була б 0x00ff00і 65280у десятковій. Тепер уявіть, що ви намагаєтесь "вручну" змішати колір у вашій голові, який має рівні частини червоного та синього, скажімо, на половину інтенсивності, щоб створити приємний фіолетовий :) У шістнадцятковій формі це було б написано просто так, 0x800080як це було би десяткове значення для цього 8388736. Це стає ще простіше при роботі з відтінками сірого - 50% сірий 0x808080(жердина) і 8421504(десяткове), 75% це 0xC0C0C0і 12632256, і так далі.

Використання шестигранника набагато інтуїтивніше, і кожен, хто знайомий з цим використанням кольору, одразу зможе «відгадати» колір, просто подивившись на шістнадцяткове значення. Це також набагато менше схильних до помилок, якщо вам потрібно використовувати один і той же колір кілька разів (що зазвичай буває).

Ознайомтеся з будь-якою веб-сторінкою (і особливо CSS) щодо божевільної кількості шістнадцяткових витрат: D

ПРИМІТКА. У CSS шістнадцяткові значення записуються за допомогою #префікса, наприклад: #00ff00для зеленого кольору, а також іноді скорочуються до трьох цифр, наприклад, #0f0для зеленого.


0

Для деяких алгоритмів база 2 має більше сенсу, ніж будь-що інше. Наприклад, чи бажаєте ви написати функцію переходу бінарного дерева або дерева з десятьма арками?

Але частіше використовується база 2, оскільки саме так комп'ютери майже універсально представляють свою кількість. Це означає що:

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

Крім того, завжди є рідкісне застосування, яке по суті вимагає непарної основи, яка не може бути ні 2, ні 10.


2
Звичайно, я б використовував 10-арне дерево. Який цей дивний 2персонаж ви використовуєте?
CodesInChaos

0

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

ПРИЧИНИ ДЛЯ БАЗИ x

База 10 - Модель усіх наших речей, тому що у нас є 10 підрахункових цифр (ноги дивні і смердючі, тому ми їх не використовуємо).

База 2 - Комп'ютери використовують це для бітів (увімкнення / вимкнення), це пов'язано з читабельним рівнем напруги, який поширюється воротами / транзисторами / конденсаторами.

База 8 - Старий, коли коли комп’ютери не були надмірно великими (або назад, коли вони були просторовими), це було добре для чогось чи іншого (мені це не подобається один біт)

База 16 - добре підходить для показу верхньої та нижньої частини байтів для маніпулювання бітом. Це дуже корисно у вбудованому / fpga / апаратному світі.

НОРМАЛЬНІ ОСНОВИ В КОМП'ЮТЕРАХ

Щоб перейти з перевагою, я міг би точно сказати вам, як колір "на" знаходиться в шестигранному значенні RGB, яке мені дано, це, отже, може бути представлено в одній точці в апаратному забезпеченні, а потім з деякими зрушеннями можна повернути мені легкий горох, 1 складний колір = 1 точка даних, що приємно для великої обробки зображень з обмеженою пам'яттю. Порівняйте це з базовим представленням 10, ви можете додати їх усіх і зберегти в число, але яке число - це, а може, R - час 10000, G - 100, а B - власний простір, це багато математичних операцій , зазвичай множення коштує більше циклів, ніж зсув, тому наступний фрагмент даних вже стоїть у черзі до того, як буде зроблено ваш останній фрагмент, який обробляється, ну, це вже минуло.

Іноді просто краще працювати в базі 2, 8 або 16. У більшості машин множення на 2 - це лише невеликий зсув, вони дуже швидкі, однакові з поділом на 2.

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

У цьому випадку присвоєння цілому знаку, байту чи int кожному перемикачу було б неефективним і нерозумним, комутатор або світло має 2 положення - увімкнено і вимкнено - чому я призначу щось, що має до 256 позицій, або 2 ^ 16 позиції тощо. Кожне світло в масиві може містити один біт 8 або 16, 32 або 64 або 128 (ширина вашого типу даних) на одному слові / регістрі. Ефективність простору потрібна і досить вітається.

Використовувати все, що є базовим 2 ^ n в програмуванні для таких речей, як обробка даних RGB, безліч сигнальних даних - GPS, аудіо, ascii тощо, - набагато простіше в шестигранному, бінарному та восьмеричному, оскільки саме так воно представлено в машині і можна легше розпізнати, що представлено, і як ними маніпулювати.

ВИКОРИСТАННЯ СИЛЬНИХ ОСНОВ

Ефективності немає, якщо ви не кодуєте її. Ви хочете базу 11, ви повинні встановити для неї тип даних і перевантажити будь-яких операторів, щоб обробити його представлення користувачеві. Я не бачу причин, чому система, яка містить 5 предметів, і лише коли-небудь тримає кратні 5 елементів, повинна бути перетворена на математику з п'яти предметів. І далі, ви б краще помолилися, щоб хто вирішив написати свій код для бази 271, це добре задокументував, або ви могли б витратити більше часу на його розуміння, ніж варто створити базу 271, оскільки всі елементи кратні 271.


0

Ще в стародавні часи на комп'ютерах у нас був ряд дисплеїв, на яких можна було показати цифри 0-9, але у нас ще не було AF.

http://ad7zj.net/kd7lmo/images/ground_nixie_front.jpg - один із таких прикладів ...

На цих дисплеях вісімка добре помістилася, і було простіше, ніж двійкові чи десяткові.


0

Я здивований, що всі інші відповіді не згадали про два дуже поширені варіанти використання в обчисленні для альтернативних баз:

  1. Кодування : Наприклад, кодування Base64 надзвичайно поширене. Кодування просто інтерпретує серію байтів як велике двійкове (база-2) число і перетворює це число в число Base64, представлене цифрами ASCII.
  2. Стиснення : Часто бажано представляти двійкове, десяткове чи шістнадцяткове число у більшій базі, щоб скоротити подання. Наприклад, всі це ущільнювачі, як bit.ly, роблять це. Або ви можете зробити це, щоб скоротити GUID для використання в URL-адресі.

    - 821F6321-881B-4492-8F84-942186DF059B (base-16 guid) 
    becomes
    - RRIDHW463YD8YXX7MIDI (base-36)
    - 3UFmaWDjj9lifYyuT0 (base-62)
    
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.