Довідник : одиниці вимірювання, система числення, час у різних країнах
Значить результат буде мати вид 1ххххххххх, де замість х може стояти 1 або 0. Знайдемо другу цифру результату. Піднесемо двійку до степеня 9 і віднімемо з вихідного числа: 567-2^9=55. Потім порівнюємо з числом 2^8=256. Тому що 55 менше 256 те дев'ятий розряд буде нулем, тобто результат уже прийме вид 10хххххххх.
Роздивимося восьмий розряд: 2^7=128 > 55, значить і восьмий розряд буде нулем. Так як 2^6=64 то сьомий розряд дорівнює нулю. У такий спосіб ми одержали чотири старших розряди і число прийме вид 1000хххххх. Обчисляємо 2^5=32 і бачимо, що 32 < 55, значить шостий розряд дорівнює 1 (результат 10001ххххх), залишок 55-32=23.2^4=16 < 23 - п'ятий розряд 1 => 100011хххх. Залишок 23-16=7.2^3=8 > 7 => 1000110ххх. 2^2=4 < 7 => 10001101хх, залишок 3.2^1=2 < 3 => 100011011х, залишок 1.2^0=1 = 1 => 1000110111. Ми одержали кінцевий результат.Тепер спробуємо перекласти теж число 567, але вже в шістнадцяткову систему. Підхід приблизно такий же. Визначимо максимальний розряд. Так як. 16^2=256 < 567, а 16^3=4096 > 567, то максимальний розряд 2+1=3. Визначимо число, що буде стояти в третьому розряді. Шукається максимальний множник у межах від 1 до 15, щоб поточний степінь шістнадцятьох помноженого на цей множник був менше або рівнявся вихідному числу (а надалі - залишку). У нашому прикладі цей множник 2, тому що 256*2=512 < 567, а 256*3=768 > 567. Значить старший розряд нашого результату буде дорівнює 2, і результат прийме вид 2хх, де замість х можуть стояти будь-які цифри або букви з нижче перерахованих: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F. Обчисляємо залишок: 567-2*16^2=55. Визначимо що буде стояти в другому розряді. Тому що 3*16^1=48 < 55, а 4*16^1=64 > 55, то в другому розряді буде стояти цифра 3. Залишок=55-3*16^1=7. Визначаємо перший розряд: тому що 16^0=1 то цифра першого розряду дорівнює залишку, тобто 7. У такий спосіб ми одержали число 237, але вже в шістнадцятковій системі числення.
Операція перекладу з десяткової системи виглядає набагато простіше. Роздивимося її на прикладі перекладу із шстнадцяткової системи в десяткову.
Припустимо нам потрібно перекласти число 4A3F у десятеричну систему. Беремо старший (4-ий) розряд і будуємо 16 в степені 4-1=3, одержуємо 16^3=4096. Отриманий результат множимо на значення четвертого розряду, тобто 4. Утворюється 4096*4=16384. Цей результат ми заносимо в суму. Переходимо до такого розряду: 16^2=256. 256 потрібно умножити на значення третього розряду тобто A. Як відомо в шістнадцяткові системі числення букви від A до F символізують числа від 10 до 15 ( A=10, B=11, C=12, D=13, E=14, F=15).
Помноживши 256 на 10 одержимо 2560 і цей результат добавляємо до суми, у якій в нас поки було 16384. У сумі в нас утворилося 18944. Переходимо до другого розряду: 3*16^1=48, додавши це в суму одержимо 18992. І останній розряд: 15*16^0=15. Кінцева сума дорівнює 19007. Ми одержали результат у десятеричній системі числення.
Методологічний підхід.
Розглядаючи переклад із десяткової системи числення в двійкову і шістнадцяткову, можна знайти багато спільного. У обох випадках ми шукаємо максимальний степінь, потім в обох випадках порівнюємо залишок із числом зведеним у степінь розряду. Єдина різниця полягає в тому, що при перекладі в двійкову систему основою степені служить двійка, а при перекладі в шістнадцяткову систему підставою служить число шістнадцять. Виникає питання: а не можна чи об'єднати обидва цих переклади в одну процедуру, у якій у якості параметрів передавати основу степені?
При більш докладному розгляді перекладу в двійкову систему можна зауважити, що порівнюючи залишок із ступенем двійки ми відзначаємо тільки як би два стани: є або немає, тобто 1 або 0, а при перекладі в шістнадцяткову систему ми розглядаємо не просто степінь числа шістнадцятьох, а добуток цього ступеня на розмір майбутнього розряду. Виникає питання: а не одне чи це і теж. Адже перемноживши число на одиницю ми його не змінюємо, а отже немає різниці тим часом, порівнювати степінь із залишком або з залишком помноженим на одиницю.
У такий спосіб з'ясувалося, що переклад із десятеричної системи числення в двійкову і у шістнадцятирічну можна здійснювати одною процедурою, у якій у якості параметра передавати основу степеня, тобто основу кінцевої системи числення.
Щоб не ускладнювати програму і не робити множину операторів умовного переходу в залежності від того, до якої системи числення належить вихідне число, запровадження цього числа здійснюється єдиним блоком, і вихідне число в результаті виконання цього блока записується у вигляді стрічкової змінної і передається на опрацювання наступному блоку. Другий блок опрацьовує рядок символів, що надійшов у нього, таким чином, що на виході цього блока утворюється числове значення в десятеричній системі числення вихідного числа. І третій заключний блок перетворить це числове значення в рядок символів, що буде містити результат у системі числення, що була потрібна.