Перевод чисел из одной системы счисления в другую с использованием
Промежуточной двоично-десятичной системы
Перевод десятичных чисел в двоичные по универсальным правилам (алгоритмам), изложенным выше (путем деления целого числа и умножения дробного числа на два), так же как перевод двоичных чисел в десятичные (путем умножения и деления на десять), требует большого числа операций и значительного времени. В связи с этим на практике для перевода десятичных чисел в двоичные и двоичных в десятичные используют промежуточную двоично-десятичную систему счисления.
В двоично-десятичной системе счисления для изображения любой десятичной цифры от 0 до 9 отводится четыре двоичных разряда с весовыми коэффициентами 8-4-2-1, т.е. в двоично-десятичной системе десятичные цифры изображаются следующим образом:
0 = 0000; 1 = 0001; 2 = 0010; 3 = 0011; 4 = 0100;
5 = 0101; 6 = 0110; 7 = 0111; 8 = 1000; 9 = 1001.
Очевидно, что при таком представлении перевод двоичных чисел в двоично-десятичные и наоборот осуществляется легко и быстро с помощью шифраторов и дешифраторов. Поэтому при переводе десятичного числа в двоичное сначала десятичное число преобразуют в двоично-десятичное, после чего осуществляют его преобразование в двоичное.
Рассмотрим технологию преобразований на примере десятичного числа в двоичное.
Перепишем число с учетом весовых коэффициентов всех входящих в него десятичных цифр:
.
Заменим каждую цифру целой и дробной части числа ее изображением в двоично-десятичной системе:
Целая часть Дробная часть
7 = 0111 3 = 0011
3 = 0011 7 = 0111
4 = 0100 5 = 0101
Запишем в двоичной системе значение весовых коэффициентов для целой и дробной части числа :
Целая часть Дробная часть
(102)(10) = 1100100(2) (10-1)(10) = 0,0001100110(2)
(101)(10) = 1010(2) (10-2)(10) = 0,0000010100(2)
(100)(10) = 1(2) (10-3)(10) = 0,0000000001(2)
Теперь нетрудно найти двоичное представление целой и дробной части числа .
Целая часть числа в двоичной системе определяется следующим образом:
(0111) ∙ (1100100) + (0011) ∙ (1010) + (0100) ∙ (1) = 1011011110(2),
т.е. после выполнения соответствующих операций в двоичной системе имеем 734(10) = 1011011110(2).
Дробная часть числа в двоичной системе определяется следующим образом:
(0011) ∙ (0,0001100110) + (0111) ∙ (0,0000010100) +
+ (0101) ∙ (0,0000000001) = 0,0101111001(2),
т.е. после выполнения соответствующих двоичных операций имеем 0,375(10) = 0,0101111001(2).
Легко видеть, что при переводе дробной части появилась погрешность вследствие приближенного (ограниченного десятью двоичными разрядами) представления весовых коэффициентов цифр дробной части. Таким образом, . Перевод десятичного числа в двоичное завершен.
Обратный перевод двоичного числа в десятичную систему счисления также осуществляется с использованием двоично-десятичной системы счисления в качестве промежуточной. При переводе целых двоичных чисел в двоично-десятичную систему счисления используются два регистра сдвига, в первый из которых перед началом перевода записывается исходное двоичное число старшими разрядами вперед (влево), а во втором формируется двоично-десятичный результат перевода.
Для организации перевода -разрядного двоичного числа в двоично-десятичное требуется циклов, каждый из которых состоит из двух шагов:
1) сдвинуть двоичное число на один разряд из двоичного регистра в двоично-десятичный;
2) каждую десятичную цифру в двоично-десятичном регистре, превышающую 4, увеличить на три.
В качестве иллюстрации произведем перевод полученного выше двоичного числа 1011011110 в двоично-десятичную систему счисления. Для наглядности воспользуемся следующей таблицей, где римскими цифрами указан цикл, а арабскими - номер шага.
Номер | Содержание регистров сдвига | |||
Цикла | Десятичные разряды | Двоичные разряды | ||
И | d2 | d1 | d0 | x9 x8 x7 x6 x5 x4 x3 x2 x1 x0 |
Шага | 0 0 0 0 | 0 0 0 0 | 0 0 0 0 | 1 0 1 1 0 1 1 1 1 0 |
I 1 | 0 0 0 1 | 0 1 1 0 1 1 1 1 0 | ||
II 1 | 1 0 | 1 1 0 1 1 1 1 0 | ||
III 1 | 1 0 1 1 1 1 0 0 0 | 1 0 1 1 1 1 0 1 0 1 1 1 1 0 | ||
IV 1 | 0 0 0 1 | 0 1 1 1 1 0 | ||
V 1 | 1 0 | 0 0 1 0 | 1 1 1 1 0 | |
VI 1 | 1 0 0 1 0 0 | 0 1 0 1 1 1 1 0 0 0 | 1 1 1 0 1 1 1 0 | |
VII 1 | 1 0 0 1 1 1 1 1 0 0 | 0 0 0 1 0 0 0 1 | 1 1 0 1 1 0 | |
VIII 1 | 1 0 0 0 1 1 1 0 1 1 | 0 0 1 1 0 0 1 1 | 1 0 1 0 | |
IX 1 | 1 1 1 1 | 0 1 1 0 1 1 1 0 0 1 | 0 1 1 1 1 1 1 0 1 0 | |
X 1 | 1 1 1 | 0 0 1 1 | 0 1 0 0 | |
Результат в десятичной системе счисления |
Читателям предлагается самостоятельно произвести перевод полученной выше правильной дроби 0,0101111001 в десятичную систему, применяя изложенный способ с использованием промежуточной двоично-десятичной системы, и дать оценку погрешности перевода.
Известен еще один способ перевода целых чисел и правильных дробей из одной системы счисления в другую, основанный на следующих процедурах.
Для перевода целых чисел из системы счисления с основанием в систему с основание выполняется последовательное умножение цифр исходного числа, начиная со старшей цифры, записанного в системе счисления с основанием , на основание этой системы, суммирование полученного значения с цифрой следующего разряда и т.д. в системе счисления с основанием .
Аналогичная процедура проводится для дробных чисел, начиная с самой младшей цифры дроби, с заменой умножения делением.
Удобство данного способа, по-видимому, состоит в том, что требуется образовать только значения цифр и основания исходной -ичной системы счисления в -ичной системе.
Рассмотрим этот способ на двух примерах.
Пример.
Перевести целое число 10110110(2) из двоичной системы в десятичную систему счисления, т.е. а .
Последовательность
операций
Старший разряд 1 1 х 2 = 2
0 (2+0) х 2 = 4
1 (4+1) х 2 = 10
1 (10+1) х 2 =22
0 (22+0) х 2 = 44
1 (44+1) х 2 = 90
1 (90+1) х 2 = 182
Младший разряд 0 (182+0) = 182
Результатперевода: 10110110(2)=182(10).
Пример.
Перевестиправильную дробь 0,1011(2) из двоичной системы счисления в десятичную.
Последовательность
операций
Младший разряд 1 1 : 2 = 0,5
1 (0,5+1) : 2 =0,75
0 (0,75+0) : 2 = 0,375
Старший разряд 1 (0,375+1) : 2=0,685
Результат перевода: 0,1011(2)=0,685(10).