Рассмотрим вначале методы перевода чисел из смещенной системы счисле- ния с основанием k 1 в смещенную систему с основанием k 2. Через будем обозначать число X в k 1 - й системе.
Правая часть выражения (2) определяет правило вычисления количествен- ного эквивалента числа, записанного в форме (1). На этом основан один из мето- дов перевода чисел. Для перевода числа в систему с основанием k 2необходимо записать в форме (2); заменить цифры хi и основание k 1их k 2 - ми эквивален- тами, а затем вычислить выражение (2) по правилам системы счисления с осно- ванием k 2.
Пример 1. Перевести число X(2) = 1011,1001 в десятичную систему счисле-ния
Описанный метод перевода чисел из одной системы в другую получил наз- вание метода непосредственного замещения. Этот метод удобно использовать в случае, когда k 1< k 2 и при переводе чисел в такую систему, где просто выполняя- ются операции сложения и умножения (например, из двоичной системы в десятич-ную). Для упрощения вычисления при этом можно воспользоваться таким выра- жением, полученным из (2):
Однако при переводе чисел в системы с «непривычными» основаниями, особенно в случае k 1> k 2,применение этого метода связано с довольно громозд- кими вычислениями. Поэтому во многих случаях удобнее пользоваться отдельными методами перевода целых чисел и правильных дробей.
Метод перевода целых чисел из системы с основанием k 1всистему с осно- ванием k 2(k 1> k 2) заключается в следующем. Число делят на k 2поправилам деления с основанием k 1до получения остатка. Если частное от деления не нуль, то частное становится делимым и процесс деления на k 2продолжают. Как толь- ко очередное частное станет равным нулю, процесс деления на k 2 прекращают. Остаток, полученный при первом делении на k 2 , представляет цифру разряда результата с весом , остаток от второго деления представляет цифру результата с весом ,и т. д. Последний остаток является старшей цифрой результата.
Пример 2. Перевести число Х (10) = 1247 в пятеричную систему счисления.
В случае, когда k 1< k 2, выполняют умножение цифры с весом , числа (старшей цифры числа ) на основание k 1, после чего к произведению прибав- ляют следующую (в порядке убывания весов) цифру числа . Результат предыдущей операции умножают на k 1и прибавляют очередную цифру числа . Этот процесс заканчивают, когда будет прибавлена цифра с весом (младшая цифра). Все вычисления при этом выполняются в k 2-й системе счисления.
Пример 3. Перевести из двоичной системы в троичную число Х (2) = 10110110.
Перевод правильных дробей из системы счисления с основанием k 1всис- тему с основанием k 2 (k 1> k 2 ) осуществляется так. Дробь, соответствующая числу , умножается на k 2 по правилам умножения в системе с основанием k 1 . В полученном произведении отделяется целая часть, которая может быть равной ну- лю, а дробная часть снова умножается на k 2с последующим отделением целой части. Эти операции повторяют либо до получения нулевой дробной части произ- ведения, либо до получения необходимого количества разрядов числа в новой системе счисления. Старшая цифра результата перевода (т. е. первая после запятой) совпадает с первой отделенной целой частью, вторая цифра результата—со второй отделенной целой частью и т. д.
Пример 4. Перевести число Х (10) = 0,314 в двоичную систему счисления, ограничившись шестью разрядами после запятой.
При k 1< k 2 для перевода правильной дроби, имеющей т цифр после запя- той, необходимо разделить цифру младшего разряда числа на k 1 и сложить со следующей цифрой этого числа. Такую операцию необходимо повторить еще т –1 раз, используя на каждом шаге в качестве делимого сумму, полученную на пре- дыдущем шаге. Все операции выполняются в k 2-й системе.
Пример 5. Перевести в десятичную систему число Х (2) = 0,101101.
Перевод чисел в симметричные и кососимметричные системы счисления с основанием k 2можно осуществить в три этапа. На первом этапе, используя рас- смотренные выше правила, осуществляется перевод чисел в смещенную систему счисления с основанием k 2 . На втором этапе цифры k 2-й смещенной системы, ко- торые отсутствуют в симметричной и кососимметричной системе, представляются двумя цифрами симметричной или кососимметричной системы, в которую осуще-ствляется перевод. На третьем этапе осуществляется суммирование всех допусти- мых для симметричной или кососимметричной системы цифр, полученных на пер- вом и втором этапе, с учетом их весов по правилам этих систем счисления.
Пример 6. Перевести число Х (10) = 1247 в пятеричную каноническую симметричную систему счисления.
После выполнения первого этапа (см. пример 2) получим Х {5) = 14442. Посколь- ку допустимыми для симметричной системы счисления являются цифры {-2, -1, 0, 1, 2}, то цифру 4 представляем двумя цифрами симметричной системы следую- щим образом: 4 = . На третьем этапе осуществляем суммирование. Результат суммирования является числом 1247, представленным в пятеричной симметричной системе счисления.
Для перевода чисел из симметричных и кососимметричных систем в сме- щенные системы достаточно просуммировать цифры числа в исходной системе с учетом их знаков и весов.
Пример 7. Перевести в десятичную смещенную систему число .
Перевод чисел из канонических систем в квазиканонические системы и об- ратный перевод выполняются аналогично.
Для преобразования нечетного положительного числа из k 1-й системы счи- сления в двоичную систему с цифрами {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 .
Обратный перевод выполняется так же, как и перевод из симметричных систем в смещенные.
Методы перевода чисел из систем с основанием 2 r в двоичную систему и наоборот очень просты, чем и объясняется широкое использование этих систем для ввода и вывода информации в ЭВМ. Для перевода числа из системы счисления с основанием 2 r в двоичную систему необходимо представить каждую цифру систе- мы с основанием 2 r посредством r двоичных разрядов.
Пример 9. Перевести числа X (8) = 762,15 и Y (16) = Е51А,7D в двоичную сис-тему счисления.
X (2) = 111110010,001101; Y (2) =1110010100011010,01111101.
Для перевода двоичного числа в систему счисления с основанием 2 r необходимо, двигаясь от запятой влево и вправо, разбить двоичное число на группы, со- держащие no r разрядов, дополняя при необходимости нулями крайние левую и правую группы. Затем каждую группу из r двоичных разрядов необходимо заме- нить цифрой системы счисления с основанием 2 r.
Пример 10. Перевести число Х {2) = 11111101, 1000001 в шестнадцатирич- ную систему счисления
Высокая скорость перевода чисел может быть достигнута с помощью таб- личных методов. В простейшем случае применения этих методов в памяти ЭВМ хранится таблица соответствия между всеми числами в системах счисления с осно- ваниями k 1и k 2, а перевод сводится к обращению к нужной ячейке памяти. Однако размеры таблицы и занимаемый ею объем памяти часто оказываются технически неприемлемыми. Поэтому с целью уменьшения занимаемого объема памяти в ней хранят только таблицы соответствия цифр заданных систем счисления и весов их разрядов. Перевод чисел осуществляется путем обращения к этим таблицам и выполнения операций сложения и умножения в системе с основанием k 2(как и по методу непосредственного замещения}. Если числа в системе с основанием k 1представлены п 1разрядами, то по первому варианту размерность хранимой таблицы определяется строками, а по второму k 1+ п 1+1 строками.
В позиционных системах с отрицательным основанием k < –1 представление любого рационального числа имеет вид
где xi – цифры i -го разряда. Отсюда следует, что веса отдельных разрядов в таких системах образуют ряд
На этом основан один из методов перевода чисел из системы с основанием k 1в систему с отрицательным основанием k 2< -1. Сначала число переводят в сис- тему с положительным основанием k 2 . Затем число разделяют на два числа А и 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 в систему с осно- ванием k 2= – 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.
Для перевода числа в систему с положительным основанием k 2 , необходимо также разделить на два числа А и 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 = (k 1 j, k 2 j, …, k m j), (j = ),
а также любой k -ичной цифры
xj = (x 1 j , x 2 j , …, x m 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, P 4=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= (1ּ2 +1ּ0 +1ּ0) (mod 3) = 2;
X 2 = (0ּ3 + 0ּ3 + 1ּ 4) (mod 5) = 4;
Х 3= (2ּ1 + 3ּ3 +1ּ2) (mod 7) = 6;
Х 4= (1ּ8 +10ּ3 +1ּ9) (mod 11) = 3.
Следовательно, X = (2, 4, 6, 3). Такой же результат получается и при ис- пользовании формул (5).
Наиболее простой и естественный путь перевода чисел из СОК в позици- онную систему, состоящий в решении системы уравнений вида
X = l 1 P 1 + X 1; X = l 2 P 2 + X 2, …; X = li Pi + Xi,
на практике не может быть использован, так так число неизвестных X, l 1, l 2 , …, 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 = 3ּ5ּ7ּ11 = 1155; = 1, = 1, = 2, = 2; В 1= 385, B 2= 231, B 3 = 330, B 4 = 210. Следовательно,
X (10) = 2ּ385 + 3ּ231 + 4ּ330 + 5ּ210 (mod 1155) = 3833 (mod 1155) = 368.
Кроме метода ортогональных базисов для перевода чисел из СОК в пози- ционную систему используются также методы, основанные на промежуточном представлении числа в полиадической системе счисления. В такой системе при за-данном наборе модулей Pi (i = )вес qi каждого i- горазряда равен qi -1 Pi,a q o = 1. Поэтому представление числа X в полиадической системе имеет вид
,
где bi — цифры полиадической системы. При переводе из СОК b 0= Х 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 5 P 12 (mod 9) = 1; rest 9 P 21 (mod 5) = 1;
rest 5 P 13 (mod 11) = 1; rest 9 P 23 (mod 11) = 1
следует Р 12 = 2, P 13= 9; Р 21 = 6, Р 23= 5. Кроме того, b 0= 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),
b 1 = rest a 1 (mod 9) = 6;
а 2(С0К) = ((0, 6, 8) - (0, 6, 6)) (6, 0, 5) = (0, 0, 2) (6, 0, 5) = (0,0, 10),
b 2 = rest a 2 (mod 11) = 10.
Таким образом, X (10) = b 0 + b 1 P 1 + b 2 P 1 P 2 = 3 + 6ּ5 + 10ּ5ּ9 = 483.