Нехай дано дійсне число, що складається із n+1 цифр цілих (Ц) і k цифр дробових (Д). Пронумеруємо, починаючи з нуля , позиції числа від десяткової точки вправо і вліво. В даному випадку позиційною системою числення з основою є така система, в якій кожна цифра числа (Ці або Ді) належить множині {0,1,…, q-1}, а числова позиція i=[-k,n] має свій, чітко визначеним змістом.
Існує загальне правило переведення чисел із десяткової системи в будь-яку іншу позиційну систему числення з основою q. Для переведення цілого десяткового числа в систему числення з основою q потрібно дане число послідовно ділити на цю основу до отримання цілої остачі, меншого, чим q. Результат в системі числення з основою q буде представлено у виді впорядкованої послідовності остач від ділення у зворотному порядку їх отримання.
Для переведення дійсного десяткового числа (правильного дробу) в систему числення з основою q потрібно дане число послідовно множити на цю основу до тих пір , поки у мантисі або чистий нуль (що буває дуже рідко), або потрібна кількість розрядів. Результат у системі числення з основою q буде представлено у виді впорядкованої послідовності цілих чисел (мантиса при цьому відкидається).
1. Десяткова система числення (Desimal). Арабська система числення є позиційною, а римська – ні. Перевіримо на прикладах. Число у арабській десятковій системі числення (q=10) складається із множини цифр {0,1,2,3,4,5,6,7,8,9}. Число 5 3 4 2 Позиція 3 2 1 0 5*103+3*102+4*101+2*100=5000+300+40+2=5342
2. Двійкова система числення (Binary). Її основа q=2. Число у даній системі утворено із множини цифр {0,1}. Базова одиниця комп’ютерних даних називається біт. Слово БІТ є зручним скороченням незручного англійського виразу binary digit, тобто двійкова цифра. Двійкове число – це послідовність біт. 2.1. Переведення цілих десяткових чисел у двійкову систему числення Для переведення цілого десяткового числа в систему числення з основою q=2 потрібно дане число послідовно ділити на число 2 до отримання цілої остачі, меншої за 2. Результат в двійковій системі числення буде мати вигляд упорядкованої послідовності остач від ділення в порядку, у зворотному порядку їх отримання. Це ми прекрасно знаємо.
2.2. Переведення правильних десяткових дробів у двійкову систему числення. Для переведення дійсного десяткового числа ( правильного дробу ) в систему числення з основою q=2 потрібно дане число (лише мантису) послідовно множити на число 2 до тих пір, поки у мантисі не отримаємо чистий нуль, або потрібне число розрядів. При множенні отримані цілі значення НЕ враховуються. Проте вони послідовно зараховуються у результат. Отримаємо упорядковану послідовність цілих чисел двійкових цифр. 0.5 d 0.1 b
0.05 d 0.000011(0011) b В даному прикладі дуже повезло, тому що не дуже довго множили. Тут ми зіткнулися з досить ВАЖЛИВИМ ФАКТОМ при програмуванні : дійсні дані в загальному випадку НЕМОЖЛИВО точно представити в пам’яті. Точність представлення залежить від формату числа і розрядності комп’ютера.
2.3. Переведення змішаних десяткових чисел у двійкову систему числення. Дійсне змішане число в системі числення з основою q=2 утвориться, як і у десятковій , шляхом з’єднання (конкатенації) цілої і дробової частини. 2.4. Переведення двійкових чисел в десяткову систему числення. Двійкова система числення є позиційною з основою q=2, тому для неї справедлива формула (1). Тобто можемо розкласти двійкове число по степеням двійки.
3. Шістнадцятирічна система числення (Hexadecimal). Дана система числення визначена на множині цифр {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f} і дозволяє суттєво стиснути двійкову інформацію, полегшуючи тим самим її видачу в різних лістингах. А людина, аналізуючи дану інформацію,може при необхідності самі отримати двійкову інформацію і в ній розібратися. Це розумний компроміс між тим , що зручно комп’ютеру, і тим, що зручно людині. (П. Нортон)
Зв’язок між цими системами числення досить проста – одна шістнадцятирічна цифра відповідає чотирьом ( тетрада ) двійковим. Цифри {A, B, C, D, E, F} НЕ чутливі до регістру, тому їх можна писати то малими, то великими, керуючись наочністю. Шістнадцятирічна система числення - це базова система при спілкуванні комп’ютера з людиною в загальному і в операційній системі MS DOS i Windows зокрема.
3. 1. Переведення десяткових чисел в шістнадцятирічну систему числення. В даному випадку можна скористатися загальним правилом, тобто послідовно ділити число на 16, поки не отримаємо остачу, меншу за 16 ( для цілих чисел), або множити на 16 (для правильних дробів). Це не дуже зручно, тому що легко помилитися. Тому прийнято спочатку перевести число у двійкову, а потім кожну двійкову тетраду представити шістнадцятирічною цифрою. Тетради треба отримувати, починаючи з десяткової точки (вліво – для цілої частини числа, вправо – для дробової), додаючи, якщо треба, нулі, які нічого не означають.
137 d 89 h 137 d 1000 1001 b – переводимо у двійкову раніше описаним способом. 1000 – за таблицею відповідає число 8; 1001 – за таблицею відповідає число 9. 0.5 d 0.8 h 0.5 d 0.1 b = 0.1000 b 0 – залишається нулем для цілої частини; 1000 - за таблицею відповідає число 8. В цьому прикладі для отримання тетради, двійкове число розширили нулями, які нічого не значать, і отримали результат.
0.703125 d 0.B4 h 0.703125 d 0.1011 01 b = 0.1011 0100 b 1011 - за таблицею відповідає число B; 0100 - за таблицею відповідає число 4; 0.05d 0.0C(C)h 0.05 d 0.00001(0011) b = 0.0000 1100 1100 (1100)b 0.0 C C (C)h В цьому випадку, в більш складному прикладі, розписано періодичний дріб так, щоб вийшли потрібні двійкові тетради. В результаті маємо також перідичний дріб. 117.25d 75.4h 117.25 d 111 0101.01b = 0111 0101.0100 b 7 5. 4h В даному прикладі змушені були розширити до тетради і цілу і дробову частину двійкового числа.
Для переведення досить великих цілих десяткових чисел, наприклад 13789, операція ділення на два досить трудозатратна (а на 16 ще гірше !), тому можна скористатися таблицею 2 і відразу перевести число у шістнадцятирічну систему числення. 13789 d 35DD h Для цього треба знайти у таблиці найближче десяткове число, що менше або рівне даному, і його шістнадцятирічний еквівалент: 13789 d 12 288 d 3000 h
Потім відняти знайдене число від даного і повторити операцію: Тепер , якщо треба, можна зробити переведення із шістнадцятирічної системи числення у двійкову, використавши таблицю 1. 13 789 d 3 5 D D h 0011 0101 1101 1101 b Нулі, які нічого не значать ( ведучі ), можна знищити. Тому маємо наступний вид : 13789 d 35DD h 11 0101 1101 1101 b
Таблиця 2. Зв’язок між десятковою і шістнадцятирічною системами числення. HEX DEC HEX DEC HEX DEC HEX DEC HEX DEC 1 1 10 16 100 256 1000 4096 10000 65536 2 2 20 32 200 512 2000 8192 20000 131072 3 3 30 48 300 768 3000 12288 30000 196608 4 4 40 64 400 1024 4000 16384 40000 262144 5 5 50 80 500 1280 5000 20480 50000 327680 6 6 60 96 600 1536 6000 24576 60000 393216 7 7 70 112 700 1792 7000 28672 70000 458752 8 8 80 128 800 2048 8000 32768 80000 524288 9 9 90 144 900 2304 9000 36864 90000 589824 A 10 A0 160 A00 2560 A000 40960 A0000 655360 B 11 B0 176 B00 2816 B000 45056 B0000 720896 C 12 C0 192 C00 3072 C000 49152 C0000 786432 D 13 D0 208 D00 3328 D000 53248 D0000 851968 E 14 E0 224 E00 3584 E000 57344 E0000 917504 F 15 F0 240 F00 3840 F000 61440 F0000 983040
3.2. Переведення цілих шістнадцятирічних чисел в десяткову систему числення. Оскільки між шістнадцятирічною і двійковою системою числення існує дуже тісний зв’язок, зазвичай переводять будь-яке шістнадцятирічне число в двійкове в два етапи, використовуючи наступну схему: HEX BIN DEC Для цілих чисел можна зробити це відразу, використовуючи таблицю 2. 35DD h 13 789 d 3000 h 12 288 500 h 1 280 D0 h 208 D h 13 Такі переведення можна робити за допомогою стандартного калькулятора Windows (режим - науковий), але для ЦІЛИХ чисел. Дробові числа, поки що, переводяться лише вручну.
3.3. Біти, байти, напівбайти, слова і двійкові слова. Також вже знаємо, що шістнадцятирічне число – це послідовність суміжних чотирьох біт ( тетрада ). Тоді можна казати, що байт містить у собі два шістнадцятирічних числа, тобто, інколи кажуть, що байт складається із двох напівбайтів. Таким чином, максимально можливе число, що може розміститися у байті, у двійковому форматі буде складатися із восьми одиниць, а в шістнадцятирічній – із двох цифр FF: FF h 1111 1111 b 255 d Слово (word) – це впорядкована послідовність інформації довжиною в 2 байти. Таким чином, можна дізнатися, яке максимальне число можна розмістити у слові: FFFF h 1111 1111 1111 1111 b 65 535 d
Подвійне слово (double word) – це впорядкована послідовність інформації довжиною в 2 слова (4 байта). Таким чином, можна дізнатися, яке максимальне число можна розмістити у подвійному слові: FFFF FFFF h 1111 1111 1111 1111 1111 1111 1111 1111 b 4 294 967 295 d Таким чином, можна зорієнтуватися, яке максимальне число може в ній розміститися. Розуміння цього моменту ДУЖЕ важливе при програмуванні на довільній алгоритмічній мові, в довільній операційні системі і на довільному комп’ютерній архітектурі.