
- •1.4. Алфавитное представление и преобразование информации
- •Глава 2
- •2.1. Непозиционные системы счисления
- •2.2. Позиционные системы счисления
- •Неоднородные позиционные системы счисления
- •Однородные позиционные системы счисления
- •2.3. Кодированные позиционные системы счисления
- •2.4. Системы счисления специального назначения
- •2.6. Символические системы счисления
- •2.7. Перевод чисел из одной системы счисления в другую
- •Перевод целых чисел из одной позиционной системы счисления в другую
- •2.8. Выбор системы счисления для применения эвм
- •2.9. Двоичная система счисления
- •2.10. Представление двоичных чисел в эвм
- •2.11. Точность представления чисел в эвм
- •Глава 3
- •3.1. Основные понятия
- •3.2. Операция алгебраического сложения в эвм
- •3.3. Операция сдвига
- •3.4. Сложение чисел в машинах с плавающей запятой
- •8.5. Округление чисел в эвм
- •3.6. Точность выполнения операций в машине с плавающей запятой
- •3.7. Вычисления с двойной точностью
- •Глава 4
- •4.1. Общие сведения об операции умножения
- •4.2. Умножение, выполняемое методом накопления частичных произведений
- •4.3. Сравнение схем умножения методом накопления
- •4.4. Методы ускорения операции умножения
- •4.5. Умножение чисел, заданных в дополнительном коде
- •4.6. Умножение чисел в машинах с плавающей запятой
- •4.7. Особенности выполнения операции умножения в современных эвм
- •4.8. Деление чисел с восстановлением остатков
- •4. 9. Деление без восстановления остатков
- •4.10. Машинные схемы деления
- •4.11. Деление чисел в дополнительном коде
- •4.13. Деление чисел в машинах с плавающей запятой
- •Глава 6
- •6.1. Сложение в прямых д-кодах
- •6.2. Сложение чисел в инверсных д-кодах
- •Для кода д2
- •6.3. Сдвиг д-кодов
- •6.4. Умножение чисел в д-кодах
- •6.5. Деление чисел в д-кодах
- •6.6. Перевод чисел в д-кодах
6.6. Перевод чисел в д-кодах
Рассмотрим перевод целых десятичных чисел, представленных в Д коде, в двоичную систему счисления.
Пусть задано десятичное число А = аn аn-1...а2 а1, где аi — десятичная цифра, которая должна быть представлена в Д- коде в виде а i = (а4i а3 i а2 i а1 i).
Используя равенство 10= 8 + 2 = (23 + 21), любое десятичное целое число можно записать
A = (.. .( а4n а3 nа2 n а1 n) (23 + 21) + а4n-1 а3 n-1а2 n-1 а1 n-1) (23 + 21) +… + а42 а3 2 а2 2 а1 2) (23 + 21) +
+ а41 а3 1 а2 1 а1 1.
Умножение на 2k означает сдвиг двоичного кода на k разрядов влево. Следовательно, перевод сводится к сдвигу соответствующих тетрад и их последующему суммированию.
Пример. Задано A10 = 254 или в коде Д1 А = 00100101 0100. Найти А2.
А2 = (0010. (23-21) +0101)(23-21)+0100 = (10000+0100 +0101) (2Э + 21) + 0100 = 10. 000. 000+100. 000 + 1.00. 000 +
+ 10.010 + 0.100= 11.101.000 + 10.110= 11.111.110.
Для перевода правильных дробей можно применить следующий прием. Заданную k-разрядную десятичную дробь вначале рассматривают как целое число и переводят по описанному алгоритму, а затем делят на 10k, записанное двоичными символами (10 k можно перевести в двоичный код по тому же алгоритму).
Пример. Задано A10 = 0,37 или в коде Д1 А = 0,0011 0111. Найти А2
А1 = 0011 (23 + 21) + 0111 = 11110 + 0111 = 100101
В= 102= 1100100
А2
= 10010100
1100100
1100100 0,0101111010
_ 0011000000
01100100
_ 10111000
1100100
_ 10101000
1100100
_ 10001000
1100100
_ 01001000
1100100
1,1100100
Перевод чисел из двоичной системы счисления в Д- код может осуществляться разными способами, Например, делением целых двоичных чисел на число 1010. При этом десятичные цифры получаются последовательно одна за другой. При дробных числах эта операция видоизменяется таким образом, чтобы при умножении на число 1010 можно было получить соответствующие цифры десятичных дробей.
Пример. Задано А2 = 0,0101111010 = 0,3710. Найти двоично-десятичный код этого числа. При определении кода каждого десятичной цифры числа умножение А на 10102 заменяем сложением А • 23 и А • 21.
0010,111101000
+ 0,101111010
0011 0011,10110001000
+ 101100010
0110 0110,1110101000
+ 11101010
1001 1001,0010010.
Таким образом, А2 - 10 = 0,0011 0110 1001 = 0,36910.
Перевод из Д- кода в двоичную систему счисления и наоборот можно упростить следующим образом.
Пусть число А задано в коде Д1, т. е.
n 4
А = Σ pi Σ ji p j-1
-k j
обозначив через bji константы вида pji 2 j-1, получим
n 4
А = Σ Σ ji bji
-k j
Следовательно, если хранить двоичные коды констант bji в таблице, то перевод из Д- кода в двоичную систему сводится к формированию частичных произведений вида ji bji, где ji = {0, 1}, и их последующему суммированию.
Пример. В коде Д1 задано число А10 = 59, т. е. A2-10= 0101 1001. Найти двоичный код этого числа. Константы bji в этом случае следующи:
b10 =1; b20=210=102; b30 =410= 1002; b40 =810= 10002;
b11 =1010= 10102; b21 =2010= 101002; b31 =4010= 1010002;b41 =8010= 10100002;
Поэтому А2 = 0 • 1010000 + 1 • 101000 + 0 . 10100 + 1 • 1010 + 1• 1000+ 0• 0100 + 0 • 10+ 1• 1 = 111011.
Эти же константы bji позволяют упростить перевод числа А из двоичной системы счисления в Д- код. При этом вначале из числа А вычитается наибольшая константа b4n . Если разность положительна, то 4n = 1, в противном случае 4n = 0. На следующем шаге из остатка вычитается следующая константа b3n , а значение 3n определяется знаком нового остатка. Эта процедура повторяется до тех пор, пока не будут найдены все ji. Следует отметить, что при отрицательном, текущем остатке к нему на следующем шаге новая константа прибавляется.
Пример. Задано А=5910=1110112. Найти представление числа А в коде Д1. В данной случае n = 1, поэтому потребуются только константы b10 — b40 и b11 — b41, с помощью двоичных колов которых за 8 шагов получим все восемь коэффициентов ji :
111011
1-й шаг - 1010000
- 010101 сдвиг 41 =0
2-й шаг + 101000
10011 Сдвиг 31 =1
3-й шаг - 1010
- 00001 Сдвиг 21 = 0
4-й шаг + 1010
+ 1001 Сдвиг 11 = 1
5-й шаг - 1000
+ 0001 Сдвиг 40= 1
6-й шаг - 100
- 011 Сдвиг 30 = 0
7-й шаг + 10
- 01 Сдвиг 20=0
8-й шаг + 1
Сдвиг 10 = 1
Таким образом, А2 - 10 = 0101 1001.
Достоинством данного способа перевода является использование одних и тех же констант для прямого и обратного преобразований, что упрощает его аппаратурную реализацию. При этом перевод в Д- код сводится по сути дела к выполнению операции деления с переменным делителем, а перевод из Д- кода — к выполнению операции умножения с переменным множимым.