МЕТОДЫ ПЕРЕВОДА ЧИСЕЛ ИЗ ОДНОЙ СИСТЕМЫ СЧИСЛЕНИЯ В ДРУГУЮ
Рассмотрим вначале методы перевода чисел из смещенной системы счисле- ния с основанием k1 в смещенную систему с основанием k2 . Через будем обозначать число X в k1-й системе.
Правая часть выражения (2) определяет правило вычисления количествен- ного эквивалента числа, записанного в форме (1). На этом основан один из мето- дов перевода чисел. Для перевода числа в систему с основанием k2необходимо записать в форме (2); заменить цифры хi и основание k1их k2-ми эквивален- тами, а затем вычислить выражение (2) по правилам системы счисления с осно- ванием k2.
Пример 1. Перевести число X(2) = 1011,1001 в десятичную систему счисле-ния
Описанный метод перевода чисел из одной системы в другую получил наз- вание метода непосредственного замещения. Этот метод удобно использовать в случае, когда k1< k2 и при переводе чисел в такую систему, где просто выполняя- ются операции сложения и умножения (например, из двоичной системы в десятич-ную). Для упрощения вычисления при этом можно воспользоваться таким выра- жением, полученным из (2):
Однако при переводе чисел в системы с «непривычными» основаниями, особенно в случае k1> k2 ,применение этого метода связано с довольно громозд- кими вычислениями. Поэтому во многих случаях удобнее пользоваться отдельными методами перевода целых чисел и правильных дробей.
Метод перевода целых чисел из системы с основанием k1всистему с осно- ванием k2(k1> k2) заключается в следующем. Число делят на k2поправилам деления с основанием k1до получения остатка. Если частное от деления не нуль, то частное становится делимым и процесс деления на k2продолжают. Как толь- ко очередное частное станет равным нулю, процесс деления на k2 прекращают. Остаток, полученный при первом делении на k2 , представляет цифру разряда результата с весом , остаток от второго деления представляет цифру результата с весом ,и т . д. Последний остаток является старшей цифрой результата.
Пример 2. Перевести число Х(10) = 1247 в пятеричную систему счисления.
В случае, когда k1< k2, выполняют умножение цифры с весом , числа (старшей цифры числа ) на основание k1, после чего к произведению прибав- ляют следующую (в порядке убывания весов) цифру числа . Результат предыдущей операции умножают на k1и прибавляют очередную цифру числа . Этот процесс заканчивают, когда будет прибавлена цифра с весом (младшая цифра). Все вычисления при этом выполняются в k2-й системе счисления.
Пример 3. Перевести из двоичной системы в троичную число Х(2) = 10110110.
Перевод правильных дробей из системы счисления с основанием k1всис- тему с основанием k2 (k1> k2) осуществляется так. Дробь, соответствующая числу , умножается на k2 по правилам умножения в системе с основанием k1 . В полученном произведении отделяется целая часть, которая может быть равной ну- лю, а дробная часть снова умножается на k2с последующим отделением целой части. Эти операции повторяют либо до получения нулевой дробной части произ- ведения, либо до получения необходимого количества разрядов числа в новой системе счисления. Старшая цифра результата перевода (т. е. первая после запятой) совпадает с первой отделенной целой частью, вторая цифра результата—со второй отделенной целой частью и т. д.
Пример 4. Перевести число Х(10) = 0,314 в двоичную систему счисления, ограничившись шестью разрядами после запятой.
При k1< k2 для перевода правильной дроби, имеющей т цифр после запя- той, необходимо разделить цифру младшего разряда числа на k1 и сложить со следующей цифрой этого числа. Такую операцию необходимо повторить еще т–1 раз, используя на каждом шаге в качестве делимого сумму, полученную на пре- дыдущем шаге. Все операции выполняются в k2-й системе.
Пример 5. Перевести в десятичную систему число Х(2) = 0,101101.
Перевод чисел в симметричные и кососимметричные системы счисления с основанием k2можно осуществить в три этапа. На первом этапе, используя рас- смотренные выше правила, осуществляется перевод чисел в смещенную систему счисления с основанием k2 . На втором этапе цифры k2-й смещенной системы, ко- торые отсутствуют в симметричной и кососимметричной системе, представляются двумя цифрами симметричной или кососимметричной системы, в которую осуще-ствляется перевод. На третьем этапе осуществляется суммирование всех допусти- мых для симметричной или кососимметричной системы цифр, полученных на пер- вом и втором этапе, с учетом их весов по правилам этих систем счисления.
Пример 6. Перевести число Х(10) = 1247 в пятеричную каноническую симметричную систему счисления.
После выполнения первого этапа (см. пример 2) получим Х{5) = 14442. Посколь- ку допустимыми для симметричной системы счисления являются цифры {-2, -1, 0, 1, 2}, то цифру 4 представляем двумя цифрами симметричной системы следую- щим образом: 4 = . На третьем этапе осуществляем суммирование. Результат суммирования является числом 1247, представленным в пятеричной симметричной системе счисления.
Для перевода чисел из симметричных и кососимметричных систем в сме- щенные системы достаточно просуммировать цифры числа в исходной системе с учетом их знаков и весов.
Пример 7. Перевести в десятичную смещенную систему число .
Перевод чисел из канонических систем в квазиканонические системы и об- ратный перевод выполняются аналогично.
Для преобразования нечетного положительного числа из k1-й системы счи- сления в двоичную систему с цифрами {1, } необходимо вначале перевести это число в двоичную систему с цифрами {0, 1). Затем, просматривая полученную запись слева направо, необходимо выделить все группы цифр вида 00...01, даже если они включают один нуль. Эти группы необходимо заменить на группы вида . Остальные цифры 1 остаются без изменения. При преобразовании нечетных от-рицательных чисел группы цифр 00...01 необходимо заменить на группы 1...11, остальные цифры 1 заменить на .
Пример 8. Перевести число X(10)= 0,314 в двоичную систему с цифрами (1, }. Используя результат примера 4, получим:
X(2)= 0,0101000001; = 0,1 1 1 .
Обратный перевод выполняется так же, как и перевод из симметричных систем в смещенные.
Методы перевода чисел из систем с основанием 2r в двоичную систему и наоборот очень просты, чем и объясняется широкое использование этих систем для ввода и вывода информации в ЭВМ. Для перевода числа из системы счисления с основанием 2r в двоичную систему необходимо представить каждую цифру систе- мы с основанием 2r посредством r двоичных разрядов.
Пример 9. Перевести числа X(8) = 762,15 и Y(16) = Е51А,7D в двоичную сис-тему счисления.
X(2) = 111110010,001101 ; Y(2) =1110010100011010,01111101 .
Для перевода двоичного числа в систему счисления с основанием 2r необходимо, двигаясь от запятой влево и вправо, разбить двоичное число на группы, со- держащие no r разрядов, дополняя при необходимости нулями крайние левую и правую группы. Затем каждую группу из r двоичных разрядов необходимо заме- нить цифрой системы счисления с основанием 2r.
Пример 10.Перевести число Х{2) = 11111101, 1000001 в шестнадцатирич- ную систему счисления
Высокая скорость перевода чисел может быть достигнута с помощью таб- личных методов. В простейшем случае применения этих методов в памяти ЭВМ хранится таблица соответствия между всеми числами в системах счисления с осно- ваниями k1и k2, а перевод сводится к обращению к нужной ячейке памяти. Однако размеры таблицы и занимаемый ею объем памяти часто оказываются технически неприемлемыми. Поэтому с целью уменьшения занимаемого объема памяти в ней хранят только таблицы соответствия цифр заданных систем счисления и весов их разрядов. Перевод чисел осуществляется путем обращения к этим таблицам и выполнения операций сложения и умножения в системе с основанием k2(как и по методу непосредственного замещения}. Если числа в системе с основанием k1представлены п1разрядами, то по первому варианту размерность хранимой таблицы определяется строками, а по второму k1+ п1+1 строками.
В позиционных системах с отрицательным основанием k < –1 представление любого рационального числа имеет вид
где xi – цифры i-го разряда. Отсюда следует, что веса отдельных разрядов в таких системах образуют ряд
На этом основан один из методов перевода чисел из системы с основанием k1в систему с отрицательным основанием k2< -1. Сначала число переводят в сис- тему с положительным основанием k2 . Затем число разделяют на два числа А и B. При положительном числе разряды числа А с четным i (в том числе и i = 0) равны разрядам числа с таким же i, а разряды числа А с нечетным i равны нулю.
Разряды числа В с четным i равны нулю, а в разрядах с нечетным i каждая не равная нулю цифра заменяется единицей в i +1-м разряде и цифрой |k| - xi. После этого необходимо выполнить суммирование чисел A и В с учетом того, что переносы из разрядов с четным i имеют знак «+», а из разрядов с нечетным i – знак «–». Перенос из последнего (n-го) разряда чисел А и В заменяется цифрами 1 и |k|– 1 соответственно в п + 2-м и п + 1-м разрядах.
Если же число отрицательное, то разряды числа А с четным i при заменяются единицей в i+1-м разряде и цифрой |k| –xi в i-м разряде. Нечет- ные разряды числа А равны нулю. Разряды числа В с четным i равны нулю, а раз- ряды с нечетным i равны i-м разрядам числа .Суммирование чисел также должно осуществляться с учетом знаков переносов.
Пример 11. Перевести числа X(10) = 30,75 и Y(10) = – 23,5 в систему с осно- ванием k2= – 2. В системе с основанием 2 указанные числа будут представлены как X(2) = 11110,11 и Y(2)= – 10111,1.
1 1 1 1 0 , 1 1 1 0 1 1 1 , 1
Таким образом, X(-2) = 1100011,11; Y(-2) = 111001,1.
Для перевода числа в систему с положительным основанием k2 , необходимо также разделить на два числа А и B. При этом четные разряды числа А равны четным разрядам , нечетные разряды числа А равны нулю. Число В имеет в нечетных разрядах те же цифры, что и число в нечетных разрядах. Четные разряды В равны нулю. Далее, из А следует вычесть В, если положительное, или же из В вычесть А, если отрицательное. Знак определяется знаком веса старшего разряда.
Пример 12. Перевести в систему с положительным основанием числа X(-2) = 10100,1101 и Y(-2) = 101101,10101. Первое из этих чисел положительное, так как его старший разряд имеет вес 24, а второе число отрицательное – вес его стар- шего разряда равен 25.
Другие методы перевода чисел всистемы с отрицательным k основаны на последовательном делении целого числа на основание ина последовательном ум- ножении дробей на основание. Припереводе целых чисел все остатки от деления и припереводе дробей целые части получаемых произведений должны быть по- ложительными, меньшими k. Для выполненияэтих требований при переводе дро- бей дробная часть D, используемая на каждом шаге перевода, должна удовлетво- рять условию
Перевод чисел из позиционной системы в СОК в простейшем случае вы- полняется путем деления числа X на модули Рi (i = ). Наименьшие положи- тельные остатки от такого деления и образуют представление X в СОК. Однако такой метод перевода часто оказывается малоэффективным из-за большого числа операций деления.
Другие методы перевода из позиционных систем в СОК основаны на ис- пользовании следующих свойств чисел, представленных остатками:
rest (A+B) (mod Pi) = (rest A (mod Pi) + rest B (mod Pi)) (mod Pi) ,
rest AB (mod Pi) = (rest A (mod Pi) x rest B (mod Pi)) (mod Pi) . (4)
Пусть для заданного набора модулей Рi (i = )и позиционной k-ичной системы известны представления в остатках любой степени основания
k j = ( k1 j , k2 j , … , km j ) , ( j = ) ,
а также любой k-ичной цифры
xj = ( x1 j , x2 j , … , xm j ) , ( j = ) .
Тогда
Xi = rest X (mod Pi) = rest (mod Pi) =
= (rest xj (mod Pi) rest k j (mod Pi)) (mod Pi) = (xi j k i j (mod Pi)) (mod Pi) .
Таким образом, для нахождения остатка числа X по модулю Pi , необходи- мо сложить попарные произведения остатков цифр xj и весов k j. При этом все сложения и умножения выполняются по модулю Pi.
Рассмотренный метод перевода применяется и в другом варианте, исполь- зующем не только свойства (4), но и следующее свойство:
rest AB (mod Pi) = (A rest B (mod Pi)) (mod Pi) .
В этом случае для вычисления Хi достаточно иметь представление в остат- ках либо только степеней основания kj, либо только цифр хj, т.е.
Xi = (x j k i j (mod Pi)) (mod Pi) = (xi j k j (mod Pi)) (mod Pi) . (5)
Пример 13. Перевести число X(10)= 839 в СОК с модулями Р1= 3, Р2 = 5, Р3= 7, P4=11. Для степеней основания и заданных цифр позиционной десятич- ной системы имеем
102= (1, 0, 2, 1); 8 = (2, 3, 1, 8);
101=(1, 0, 3, 10); 3 = (0, 3, 3, 3);
100= (1, 1, 1, 1); 9 = (0, 4, 2, 9).
Далее находим остатки Xi :
Х1= (12 +10 +10) (mod 3) = 2;
X2 = (03 + 03 + 1 4) (mod 5) = 4;
Х3= (21 + 33 +12) (mod 7) = 6;
Х4= (18 +103 +19) (mod 11) = 3.
Следовательно, X = (2, 4, 6, 3). Такой же результат получается и при ис- пользовании формул (5).
Наиболее простой и естественный путь перевода чисел из СОК в позици- онную систему, состоящий в решении системы уравнений вида
X = l1 P1 + X1 ; X = l2 P2 + X2 , … ; X = li Pi + Xi ,
на практике не может быть использован, так так число неизвестных X, l1, l2 , … , lm здесь больше числа уравнений и, следовательно, система уравнений имеет беско- нечное множество решений. Поэтому для этих целей используются более сложные методы, обеспечивающие однозначность перевода.
Метод ортогональных базисов основан на использовании констант (ортогональных базисов) В1 , В2 , … , Вm , представление которых в СОК при заданном наборе модулей Pi (i = ) имеет вид
В1 = (1, 0, 0, … , 0);
В2 = (0, 1, 0, … , 0);
…………………...;
Вm = (0, 0, 0, … , 1).
Представление числа X в позиционной k-ичной системе в этом случае мо- жет быть получено следующим образом:
где . Для фиксированного набора модулей Рi k-ичные представления констант Bi(k) могут быть вычислены заранее по формуле
Bi(k) = .
Здесь — вес i-го ортогонального базиса, выбираемый из условия
rest (mod Pi) = 1 .
Пример 14. Перевести в десятичную систему число X = (2, 3, 4, 5), представленное в СОК с основаниями Р1= 3, Р2 = 5, Р3 = 7, Р4 = 11. В этом случае N = 35711 = 1155; = 1, = 1, = 2, = 2; В1= 385, B2= 231, B3 = 330, B4 = 210. Следовательно,
X(10) = 2385 + 3231 + 4330 + 5210 (mod 1155) = 3833 (mod 1155) = 368 .
Кроме метода ортогональных базисов для перевода чисел из СОК в пози- ционную систему используются также методы, основанные на промежуточном представлении числа в полиадической системе счисления. В такой системе при за-данном наборе модулей Pi (i = )вес qi каждого i-горазряда равен qi-1Pi ,a qo=1. Поэтому представление числа X в полиадической системе имеет вид
,
где bi — цифры полиадической системы. При переводе из СОК b0= Х1 ,а осталь- ные цифры bi вычисляются по формулам
bi = rest ai (mod Pi+1) ,
,
.
Здесь – цифра bi -1 ,представленная остатками по всем основаниям, номер которых выше номера i–1; – так называемая формальная обратная величина модуля Pi по основаниям Рj ; (i j). Остатки , которыми в СОК представляется формальная обратная величина Pi , выбираются из условия
rest Pi (mod Рj) = 1 .
Пример 15. Перевести из СОК с основаниями Р1= 5, Р2 = 9, Р3= 11 в десятичную систему число X = (3, 6, 10). Перед вычислением цифр bi полиадичес- кой системы найдем формальные обратные величины модулей Рij . Из условий
rest 5P12 (mod 9) = 1; rest 9P21 (mod 5) = 1;
rest 5P13 (mod 11) = 1; rest 9P23 (mod 11) = 1
следует Р12 = 2, P13= 9; Р21 = 6, Р23= 5. Кроме того, b0= 3, = (3, 6, 10); = (3, 3, 3); = (0, 2, 9) .
Следовательно, а1(С0К) = ((3, 6, 10) - (3, 3, 3)) (0, 2, 9) = (0, 3, 7) (0, 2, 9) = (0,6, 8),
b1 = rest a1 (mod 9) = 6;
а2(С0К) = ((0, 6, 8) - (0, 6, 6)) (6, 0, 5) = (0, 0, 2) (6, 0, 5) = (0,0, 10),
b2 = rest a2 (mod 11) = 10 .
Таким образом, X(10) = b0 + b1P1 + b2 P1 P2 = 3 + 65 + 1059 = 483 .