- •Глава I. Организация вычислений в эвм
- •1. Позиционные системы счисления
- •2. Алгоритмы перевода чисел из одной системы счисления в другую
- •3. Формы представления чисел в двоичной системе счисления
- •4. Операции сложения чисел в прямом, обратном и дополнительном кодах с фиксированной запятой
- •4.2. Умножение чисел в дополнительных кодах
- •4.3. Операция умножения над обратными кодами сомножителей
- •4.6. Выполнение операции сложения над числами с плавающей запятой
- •5. Форматы данных
- •6. Стадии выполнения команды и способы адресации
2. Алгоритмы перевода чисел из одной системы счисления в другую
Наиболее общий алгоритм перевода числа X(k1) с основанием k1 в число X(k2) с основанием k2 выполняется в следующей последовательности:
- число X(k1) представляют в виде степенного ряда;
- заменяют цифры хi с основанием k1 их k2-ми представлениями;
- выполняют все операции сложения, умножения, возведение в степень в k2-й СС;
- с учетом точности определяют число целых и дробных цифр в числе X(k2), округляют и представляют по необходимости X(k2) в виде степенного ряда.
Рассмотрим общий алгоритм перевода чисел на примере числа X(2)= 1001,101, которое переведем в Х(10) .
1001,101 = 123 + 022 + 021 + 120 + 12-1 + 02-2 + 12-3 =
=8 +1 + 1/2 + 1/8 = 9,625(10) .
Однако применение этого алгоритма в случае k1 > k2 связано с громоздкими вычислениями, например, Х(10) = 36 переведем в Х(2) .
36(10) = 3101 + 6100 = (0011)(1010)1 + (0110)(1010)0 = 100100(2) .
Поэтому для перевода числа из 10 СС в 2 СС при k1 > k2 целую и дробную часть переводят отдельно по упрощенным алгоритмам. Для перевода целой части числа X(k1) отделяют у него целую часть Хц (k1) и делят его на основание k2 в k1-ой СС. В результате деления получают остаток О0 и частное Ч1. Если частное Ч1 k2, его делят вновь Ч1/k2. Получают остаток О1 и частное Ч2. Деление частного продолжают до тех пор, пока на i-ом шаге не будет получен остаток Оi-1 и частное Чi < k2. Последнее частное принимается за цифру хi, а цифры xi-1, …, x0 определяются соответствующими остатками Оi-1, …, О1, О0. Располагая цифры в порядке Чi Оi-1 … О0, получают целую часть числа Х(k2).
Для определения дробной части числа Х(k2) берут дробную часть Хд (k1) числа Х(k1) и умножают ее на основание k2 по правилам k1 СС. В результате первого умножения получают целую часть произведения Ц1 и дробную часть D1. На втором шаге вновь берут дробную часть 0, D1 и умножают на основание k2. Умножение дробных частей продолжают до n-го шага Цn, Dn, пока не будет достигнута необходимая точность представления дроби. Приравнивая x-i = Цi получают значение дроби Хд (k2) =, x-1 x-2 … x-n. Рассмотрим алгоритм раздельного перевода целой и дробной части числа на примере. Пусть Х(10) = 20,4 необходимо перевести в двоичную СС. Тогда процесс перевода числа можно показать как деление (слева) и умножение (справа) по шагам:
|
1) |
|
20 |
2 |
|
|
|
|
|
|
20 |
10 = Ч1 |
|
|
0,4 2 = 0,8 (Ц 1 = 0); |
|
|
|
О0 = 0 |
|
|
|
|
|
2) |
10/2 = 5 (Ч2 = 5, О1 = 0) |
|
0,8 2 = 1,6 (Ц 2 = 1); | |||
|
3) |
5/2 = 2 (Ч3 = 2, О2 = 1) |
|
0,6 2 = 1,2 (Ц 3 = 1); | |||
|
4) |
2/2 = 1 (Ч4 = 1, О3 = 0) |
|
0,2 2 = 0,4 (Ц 4 = 0). | |||
При переводе дробной части числа 20,4 умножение может быть продолжено на любое число шагов, т. к. величину 0,4(10) нельзя точно представить в 2 СС. Ограничиваясь числом шагов, получим
Хц (k2)= х4 х3 х2 х1 х0, = Ч4 О3 О2 О1 О0, = 10100,
Хд (k2)=, х -1 х -2 х -3 х -4 =, Ц 1 Ц 2 Ц 3 Ц 4 =, 0110 …
20,4(10) 10100,0110(2)
Учитывая, что основания четверичной, восьмеричной, шестнадцате- ричной СС кратны основанию двоичной, перевод чисел из этих СС в двоичную и обратно упрощен. Для перевода чисел из четверичной, восьмеричной, шестнадцатеричной СС в двоичную СС цифры в этих числах заменяются двумя, тремя, четырьмя разрядными двоичными эквивалентами слева и справа от запятой
|
123,02(4) = |
1 |
2 |
3, |
0 |
2(4) |
= 11011,001 (2) |
|
01 |
10 |
11, |
00 |
10(2) | ||
|
|
|
|
|
|
|
|
|
621,34(8) = |
6 |
2 |
1, |
3 |
4 |
= 110010001,0111(2) |
|
110 |
010 |
001, |
011 |
100 | ||
|
|
|
|
|
|
|
|
|
9Е,1D(16) = |
9 |
E, |
1 |
D |
|
= 10011110,00011101(2). |
|
1001 |
1110, |
0001 |
1101 |
|
При переводе из двоичной СС в четверичную, восьмеричную, шестнадцатеричную СС цифры двоичной системы соответственно объединяются в группы по две, три, четыре цифры слева и справа от запятой, а затем эти группы заменяются на эквивалентные цифры четверичной, восьмеричной, шестнадцатеричной СС. Например, число 1101101011,11(2) будет преобразовано
|
3 |
1 |
2 |
2 |
3, |
3 |
= 31223,3(4); |
|
11 |
01 |
10 |
10 |
11, |
11 | |
|
|
|
|
|
|
|
|
|
1 |
5 |
5 |
3, |
6 |
|
= 1553,6(8); |
|
001 |
101 |
101 |
011, |
110 |
| |
|
|
|
|
|
|
|
|
|
3 |
6 |
В, |
С |
0 |
|
= 36В,С(16). |
|
0011 |
0110 |
1011, |
1100 |
0000 |
|
