Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
08SS_Teory.doc
Скачиваний:
3
Добавлен:
10.08.2019
Размер:
499.2 Кб
Скачать

Переведення чисел з однієї системи числення в іншу

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

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

  • програмування простих мікропроцесорних систем, що вбудовуються, обробки й управління, у яких дуже обмежене сервісне обслуговування;

  • формальне автоматизоване або ручне проектування широкого класу цифрових пристроїв різного призначення;

  • налагодження й настроювання програм управління й обробки даних.

Розрізняють окремі та загальні методи переведення чисел із однієї СЧ в другу [11].

Окремі методи переведення чисел. Окремі методи застосовуються тільки для взаємного перетворення чисел, основи яких дорівнюють цілій степені числа 2, тобто 2i, де i = 1, 2, 3, 4, 5 ... (двійкових, чотиркових, вісімкових, шістнадцяткових, тощо). Правила перетворення зазначених чисел виключно прості.

Переведення вісімкових та шістнадцяткових чисел в двійкову СЧ та навпаки.

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

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

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

Приклади.

1. Перевести вісімкове число 305,4(8) в двійкову СЧ, тобто 305,4 (8) ? (2) :

305,4 (8) = 011 000 101,100 = 11000101,100 (2) .

2. Перевести шістнадцяткове число 782,E (16) в двійкову СЧ: 782,E (16)? (2):

782,E (16) = 0111 1000 0010,1110 = 11110000010,1110 (2) .

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

Приклади.

Перевести двійкове число 1011001,11011 (2) в вісімкову та шістнадцяткову СЧ:

1011001,11011(2) = 001 011 001,110 110 = 131,66 (8) ,

1011001,11011(2) = 0101 1001,1101 1000 = 59,D8 (16) .

Двійкові числа, набори цифр яких розбиті на групи по 3 (4) розряди, можна вважати вісімковими (шістнадцятковими) числами, у яких цифра кожного розряду записана у вигляді 3 (4)- розрядного двійкового числа.

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

Аналогічно можна перетворювати у двійкову СЧ (та навпаки) і інші числа із більшими основами, рівними цілому ступеню числа 2, наприклад, тридцятидвійкові. При цьому використовуються п’ятірозрядні двійкові групи (пентади), тому що i = log 2 32 = 5.

Приклад.

Перевести те ж двійкове число 1011001,11011 (2) в тридцятидвійкову СЧ:

1011001,11011(2) = 00010 11001,11011 = 2 25,27 (32) .

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

Для переведення, наприклад, вісімкового числа в шістнадцяткову СЧ варто спочатку перекласти його тріадами у двійкове число, потім перегрупувати отримане двійкове число тетрадами й одержати кінцевий результат.

Приклад.

Перевести вісімкове число 131,66 (8) в шістнадцяткову СЧ, тобто 131,66 (8) ? (16) :

131,66 (8) = 001 011 001,110 110(2-8) = 0101 1001,1101 1000(2-16) = 59,D8(16) .

Загальні методи переведення чисел. Правила переведення чисел з довільної СЧ в довільну загальними методами залежать від того, в якій СЧ виконуються необхідні арифметичні дії – в старій чи новій.

Запровадимо наступні позначення. Нехай s – основа старої СЧ, в якій подане початкове число, а h – основа нової СЧ, в яку дане число перекладається. Тоді можна подати два методи перетворення:

1. Переведення чисел із старої СЧ з основою s в нову СЧ з основою h з виконанням арифметичних операцій (АО) в новій h СЧ.

2. Переведення чисел із старої s СЧ в нову h СЧ з виконанням арифметичних дій в старій s СЧ.

Розглянемо правила переведення чисел зазначеними методами.

Переведення чисел із довільної СЧ в довільну з виконанням АО в новій h СЧ. Нехай необхідно перекласти число x, представлене в старій СЧ із основою s:

x = r r-1 r-2 i 1 0 , -1 -2 -q

у нову систему числення, виконуючи потрібні для цього арифметичні дії в новій h-системі.

Правило. Для переведення необхідно подати початкове число в розгорнутій формі у вигляді відповідної суми ступенів s:

x = rsr + r-1sr-1 + ... + 1s1 + 0s0 + -1s-1 + -2s-2 + ...,

в якій основа s та коефіцієнти i відображені в новій h-системі, та виконати в цій СЧ всі необхідні арифметичні дії для одержання необхідної суми.

Приклади.

1. Перевести двійкове число 1011,101(2) в десяткову СЧ, тобто 1011,101(2) ?(10), h СЧ:

1011,101(2) = 123 + 022 + 121 + 120 + 12-1 + 02-2 + 12-3 (10) = = 18 + 04 + 12 + 11 + 10,5 + 00,25 + 10,125 (10) = = 8 + 0 + 2 + 1 + 0,5 + 0 + 0,125 (10) = 11,625(10).

2. Перевести те ж двійкове число 1011,101(2) в десяткову СЧ, використовуючи проміжний перехід скрізь вісімкову СЧ за допомогою окремих методів переведення, тобто 1011,101(2) ?(8) ?(10), h СЧ:

1011,101(2) = 13,5(8) =181 + 380 + 58-1 (10) = 8 + 3 + 0,625 (10) = 11,625 (10) .

3. Перевести те ж двійкове число 1011,101(2) в десяткову СЧ, використовуючи проміжний перехід скрізь шістнадцяткову СЧ за допомогою окремих методів переведення, тобто 1011,101(2) ?(16) ?(10), h СЧ:

1011,101(2) = B,A(16) =1116 0 + 1016 -1 (10) = 11 + 0,625 (10) = 11,625 (10) .

4. Перевести десяткове число 126,5(10) в двійкову СЧ , тобто 126,5(10) ?(2), h СЧ:

126,5(10) = 1101010 + 1010101 + 11010100 + 1011010-1(2) = = 1100100 + 10100 + 110 + 0,1 (2) = 1111110,1(2).

5. Перевести те ж десяткове число 126,5(10) в двійкову СЧ, використовуючи проміжний перехід скрізь вісімкову СЧ за допомогою окремих методів переведення, тобто 126,5(10) ?(8) ?(2), h СЧ:

126,5(10) = 112 2 + 212 1 + 612 0 + 512 -1(8) = 144 + 24 + 6 + 0,4 (8) = = 176,4 (8) = 1.111.110,100 (2-8) = 1 111 110,1 (2) .

6. Перевести те ж десяткове число 126,5(10) в двійкову СЧ, використовуючи проміжний перехід скрізь шістнадцяткову СЧ за допомогою окремих методів переведення, тобто 126,5(10) ?(16) ?(2), h СЧ:

126,5(10) = 1A 2 + 2A 1 + 6A 0 + 5A -1(16) = 64 + 14 + 6 + 0,8 (16) = = 7E,4 (16) = 111.1110,1000 (2-16) = 1 111 110,1 (2) .

7. Перевести шістнадцяткове число 4D3, C(16) в десяткову СЧ: 4D3,C(16) ?(10), h СЧ.

4D3,C(16) = 4162 + 13161 + 3160 + 1216-1 (10) = = 1024 + 208 + 3 + 0,75 (10) = 1235,75 (10) .

Переведення чисел з виконанням операцій в старій СЧ. При виконанні арифметичних операцій в старій СЧ правила переведення різні для цілих та дробових чисел. Розглянемо ці правила роздільно.

Переведення цілих чисел.

Нехай задане ціле число y(s) = sr sr-1 s1 s0 (s) , представлене в s-системі. Потрібно перевести його в нову h-систему.

Припустимо, число вже перекладене в нову СЧ. Тоді шуканий запис цього числа в h-системі, відповідно до загального визначення систем числення, повинний виглядати наступним чином:

y(h) =  r·h r + r-1·h r-1 + + 2·h 2 + 1·h 1 + 0·h 0 .

Розділивши ліву й праву частини останнього вираження на h, отримаємо:

y/h = r·h r-1 + r-1·h r-2 + + 2·h 1 + 1·h 0 + 0·h -1 = y1 + 0/h .

Звідси знову

y = y1·h + 0 .

Тут y1 = r·h r-1 + r-1·h r-2 + + 2·h 1 + 1 – частка від ділення числа y на основу системи h ;

0 – залишок від цього ділення, що є молодшою цифрою шуканого представлення числа y в h-системі (але цей залишок поки сам записаний в s-системі, і його потрібно додатково автономно перевести в h-систему).

Розділивши далі y1 знову на h, отримаємо

y1/h = r·h r-2 + r-1·h r-3 + + 2·h 0 + 1·h -1 = y2 + 1/h .

Звідси знову

y1 = y2·h + 1 .

Отже, залишок від другого ділення є цифра  1 наступного розряду в представленні числа y в новій h-системі й так далі.

Таким чином переведення може здійснюватися по наступному правилу:

для переведення цілого числа з s СЧ в h СЧ необхідно послідовно ділити це число та отримані частки на основу нової СЧ, подану в старій s СЧ, до тих пір, доки частка не стане менше основи h. Старшою цифрою числа в новій h СЧ служить остання частка, потім йдуть остачі в порядку, зворотному їх одержанню. При цьому остачі та остання частка одержуються в старій СЧ і їх необхідно, коли це треба, додатково перетворити в цифри нової СЧ.

Приклади.

1. Перевести ціле десяткове число 49(10) в двійкову СЧ: 49 (10) ?(2), s СЧ.

Відповідь: 49 (10) =110001 (2).

2. Перевести ціле десяткове число 49(10) в вісімкову СЧ і далі, використовуючи окремій метод переведення, у двійкову СЧ: 49 (10) ?(8), s СЧ  ?(2) .

Таким чином, 49 (10) = 61 (8) .

Переведемо далі отримане вісімкове число у двійкову систему числення, користуючись окремим методом перекладу: 61 (8) = 110 001 (2) .

Відповідь: 49 (10) = 61 (8) = 110 001 (2) .

3. Перевести ціле десяткове число 49(10) в шістнадцяткову СЧ і далі, використовуючи окремій метод переведення, у двійкову СЧ: 49 (10) ?(16), s СЧ  ?(2) .

Таким чином, 49 (10) = 31 (16) .

Далі переведемо отримане шістнадцяткове число у двійкову СЧ, користуючись окремим методом перекладу: 31(16) = 0011 0001 (2) = 11 0001(2) .

Відповідь: 49 (10) = 31 (8) = 11 0001 (2) .

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

4. Перевести ціле десяткове число 11483(10) в шістнадцяткову СЧ: 11483 (10) ?(16), s СЧ.

Відповідь: 11483 (10) = 2CDB (16).

5. Перевести ціле п’ятіркове число 43(5) в десяткову СЧ: 43 (5) ?(10), s СЧ .

Р обота в п’ятірковій СЧ:

Відповідь: 43 (5) = 23 (10) .

Перевірка: 43 (5) = 4·51 + 3·50 (10) = 20 + 3 (10) = 23 (10) .

6. Перевести ціле двійкове число 111 011(2) в десяткову СЧ: 111 010 (2) ?(10), s СЧ .

Робота в двійковій СЧ:

Відповідь: 111 010 (2) = 58 (10) .

7. Перевести ціле вісімкове число 165(8) в десяткову СЧ: 165 (8) ?(10), s СЧ .

Робота в вісімковій СЧ:

Відповідь: 165 (8) = 117 (10) .

8. Перевести ціле вісімкове число 73(8) в десяткову СЧ: 73 (8) ?(10), s СЧ .

Р обота в вісімковій СЧ:

Відповідь: 73 (8) = 59 (10) .

Переведення дробових чисел з виконанням арифметичних операцій в старій СЧ.

Нехай заданий правильний дріб y(s) = 0,s-1 s-2 s1-q (s) , представлений в s-системі. Потрібно перевести його в нову h-систему.

Припустимо, дріб вже перекладений в нову СЧ. Тоді шуканий запис цього дробу в h-системі, відповідно до загального визначення систем числення, у розгорнутій формі повинний виглядати наступним чином:

z (h) =  -1·h -1 + -2·h -2 + + -q·h -q + … .

Множачи ліву й праву частини останнього вираження на h, отримаємо:

z·h = -1 + -2·h -1 + + -q·h –q+1 + = -1 + z1 .

Тут z1 = -2·h -1 + + -q·hq+1 + – дробова частина добутку;

-1 – ціла частина добутку, що є старшою цифрою в представленні дробі z у новій h-системі (але сама ця ціла частина поки записана в s-системі, і ії потрібно додатково автономно перевести в h-систему).

Якщо тепер помножити на h правильний дріб z1 , то ціла частина цього нового добутку дає наступну цифру  -2 у представленні дробі в новій h-системі, що поки сама записана в старій s-системі.

Й так далі.

Таким чином, перетворення правильних дробів може здійснюватися по наступному правилу:

Для переведення правильного дробу із старої s СЧ в нову h СЧ необхідно множити початковий дріб та дробові частини отриманих добутків на основу нової h-системи, подану в старій s-системі. Цілі частини отриманих добутків, в порядку їх одержання, дають послідовність цифр дробу в новій h-системі. При цьому цілі частини добутків одержуються в s СЧ і їх необхідно додатково перевести в цифри нової h СЧ.

Приклад.

1. Перевести правильний десятковий дріб 0,78125(10) в шістнадцяткову СЧ: 0,78125(10)  ?(16), s СЧ.

0 ,

78125

16

12

50000

16

8

0

Відповідь: 0,78125(10) = 0,C8 (16).

2. Перевести правильний десятковий дріб 0,625(10) в двійкову СЧ: 0,625(10)  ?(2), s СЧ.

0 ,

625

2

1

250

2

0

50

2

1

0

Відповідь: 0,625(10) = 0,101 (2).

3. Перевести правильний двійковій дріб 0,11(2) в десяткову СЧ: 0,11(2)  ?(10), s СЧ.

Робота у двійковій СЧ.

0 ,

11

1010

111

10

1010

101

0

Відповідь: 0,11(2) = 0,75 (10).

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

4. Перевести правильний десятковий дріб 0,5(10) в трійкову СЧ, тобто 0,5(10)  ?(3), s СЧ.

Робота у десятковій СЧ.

0 ,

5

3

1

5

...

Відповідь: 0,5(10) = 0,(1) (3). Дивись таблицю 1.2 відповідності чисел.

5. Перевести правильний десятковий дріб 0,5(10) в п’ятіркову СЧ, тобто 0,5(10)  ?(5), s СЧ.

Робота у десятковій СЧ.

0 ,

5

5

2

5

...

Відповідь: 0,5(10) = 0,(2) (5). Також дивись таблицю 1.2 відповідності чисел.

Пряме переведення чисел з довільної СЧ в довільну. Розглянемо це питання на конкретних прикладах.

Нехай потрібно перевести різними способами п’ятіркове число 423,3 (5) у трійкову СЧ. Потім отримане округлене число в трійковій СЧ варто перетворити назад у п’ятіркову СЧ також двома різними способами. Зрівняти й пояснити кінцеві результати.

Приклади.

1. Перевести п’ятіркове число 423,3(5) в трійкову СЧ, виконуючи необхідні дії в старій s СЧ, тобто 423,3 (5)  ?(3), s СЧ.

Робота у п’ятірковій СЧ.

Відповідь: 423,3(5) = 11012,(1210) (3).

2. Перевести п’ятіркове число 423,3(5) в трійкову СЧ, працюючи в новій h СЧ: 423,3 (5)  ?(3), h СЧ.

Робота у трійковій СЧ.

4 23,3 (5) = 11·12 2 + 2·121 + 10·120 + 10·12-1(3) = = 11·221 + 2·12 + 10·1 + 10/12 (3) = 11·221 + 2·12 + 10·1 + 10/12 (3) = = 10201 + 101 + 10 + 0,121012... (3) = 11012,(1210) (3) .

Відповідь: 423,3(5) = 11012,(1210) (3).

3. Перевести трійкове округлене число 11012,1211 (3) в п’ятіркову СЧ, виконуючи необхідні дії в старій s СЧ: 11012,1211 (3)  ?(5), s СЧ.

Робота у трійковій СЧ.

Відповідь: 11012,1211 (3) = 423,3003... (5). Результат отриманий із надміром.

Примітка. Нагадаємо, що округлення вихідного числа, отриманого в попередньому прикладі, виробляється за стандартним правилом, зокрема, якщо частина числа, що відкидається, дорівнює половині одиниці останнього розряду, що залишається, то при округленні числа останню із цифр, що залишаються, збільшують на одиницю, якщо вона непарна, і залишають без зміни, якщо вона парна [21].

Наприклад, при округленні чисел 3,635 і 3,645 до сотих часток одиниці, одержуємо для обох чисел те саме число – 3,64. Однак же число 3,6451 округляється до 3,65.

4. Перевести те ж трійкове округлене число 11012,1211 (3) в п’ятірко­ву СЧ, працюючи в новій h СЧ, тобто 11012,1211 (3)  ?(5), h СЧ.

Робота у п’ятірковій СЧ.

1 1012,1211(3)=1·3 4 +1·3 3 + 0·3 2 +1·31 + 2·3 0 +1·3-1 + 2·3 -2 +1·3-3 +1·3-4 (5) = = 1·311 + 1·102 + 0·14 + 1·3 + 2·1 + 1/3 + 2/14 + 1/102 + 1/311 (5) = = 311+102 + 0 + 3 + 2 + 0,(13) + 0,10234 + 0,00430 + 0,00122 (3) = = 311 + 102 + 10 + 0,300234... (5) = 423,300234 (5) .

Відповідь: 11012,1211 (3) = 423,3003(5) .

Переведення чисел з довільної СЧ в довільну з проміжним перетворенням в десяткову СЧ. При ручному перетворенні даних необхідні арифметичні дії легко виконувати в десятковій СЧ і незручно працювати в системах з не десятковими основами.

Тому другий метод (робота в старій СЧ) звичайно застосовують при перетворенні десяткових чисел в довільну СЧ. В той же час при переведенні в десяткову СЧ із довільної зручно користуватися першим методом (робота в новій СЧ).

Таким чином, варіюючи методи перетворень, можна перевести число із довільної СЧ в довільну, виконуючи необхідні арифметичні операції тільки в десятковій СЧ.

Задача переведення чисел з довільної СЧ у довільну при цьому розбивається на дві наступні послідовні задачі:

  • задане вихідне число перекладається спочатку з довільної СЧ у десяткову, виконуючи необхідні для цього дії в новій h-системі;

  • отримане десяткове число потім переводиться в необхідну СЧ, виконуючи арифметичні операції в старій s-системі.

Приклад.

Перевести те ж число 423,3(5) із п’ятіркової в трійкову СЧ. Перетворення будемо виконувати у два етапи:

1. Перевести початкове число в десяткову СЧ, виконуючи необхідні АО в новій СЧ: 423,3(5)  ?(10), h СЧ.

423,3 (5) = 452 + 251 + 350 + 35-1 (10) = 100 + 10 + 3 + 0,6 (10) = 113,6 (10).

2. Перевести одержане десяткове число в трійкову СЧ, виконуючи АО в старій СЧ: 113,6 (10)  ?(3), s СЧ.

Таким чином, додатково отримуємо цінний проміжний результат, що розкриває дійсну величину числа:

423,3(5) = 113,6 (10) = 11012,1211 (3 окр).

Перетворення даних з врахуванням точності. Переведення із однієї СЧ в іншу повинно виконуватися без втрати точності подання числа.

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

I = r·log 2 s ,

де I – кількість інформації в повідомленні;

s – об'єм алфавіту, що використовується для запису повідомлення, тобто загальна кількість символів в алфавіті;

r – довжина інформаційного повідомлення в символах.

Переходячи до термінології мови систем числення ці перемінні можна трактувати як

s – основа системи числення;

r – довжина аналізованого числа в розрядах, вірніше тільки його дробової частини.

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

Нехай є правильний дріб довжиною r1 , що представлений в системі числення s1. Потрібно перекласти це число в систему із основою s2 і визначити при цьому довжину перекладеного числа r2, щоб точність його представлення не була б загублена.

Кількість інформації у вихідному слові дорівнює I1 = r1·log 2 r1 . Після переведення кількість інформації в слові визначається наступним вираженням I2 = r2·log 2 r2 . За умовою задачі повинне дотримуватися нерівність I1 I2 .

Підставляючи значення в останнє вираження, одержимо

r1·log 2 r1 r2·log 2 r2 .

Отже, умова переведення числа без втрати точності буде виконуватися, якщо

.

Останнє вираження звичайно представляється у вигляді

.

Тут дужки ] [ означають округлення убік найближчого більшого цілого, обумовленому в математиці як округлення нагору, наприклад, Ceil ]3,14[ = 4.

Таким чином, в попередньому прикладі результат перетворення повинен бути поданий не менше, як двома округленими дробовими розрядами у трійковій системі числення

.

Отже, попередній результат переведення, округлений з урахуванням точності, можна записати наступним чином

423,3(5) = 113,6 (10) = 11012,1211 (3) = 11012,12 (3).

Звичайно дроби із однієї СЧ в другу перекладають наближено, керуючись розглянутою умовою переведення та відповідними правилами округлення результату.

115

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]