Перевод чисел из одной системы счисления в другую с использованием

Промежуточной двоично-десятичной системы

Перевод десятичных чисел в двоичные по универсальным правилам (алгоритмам), изложенным выше (путем деления целого числа и умножения дробного числа на два), так же как перевод двоичных чисел в десятичные (путем умножения и деления на десять), требует большого числа операций и значительного времени. В связи с этим на практике для перевода десятичных чисел в двоичные и двоичных в десятичные используют промежуточную двоично-десятичную систему счисления.

В двоично-десятичной системе счисления для изображения любой десятичной цифры от 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).

 



php"; ?>