Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СОДЕРЖАНИЕ 3 (2).doc
Скачиваний:
46
Добавлен:
31.08.2019
Размер:
6 Мб
Скачать
☆
  1. Выполнение операций в двоично-десятичной системе счисления

В разделе 2.1 приведен вариант кодирования десятичных цифр их двоичными эквивалентами. Этот вариант не является единственно возможным. Ничто не препятствует приведению в соответствие любой десятичной цифре любого, и быть может не единственного, двоичного кода. Необходимо лишь обеспечить достаточное количество двоичных кодов для кодирования 10 десятичных цифр и двоичному коду приводить в соответствие не более чем одну десятичную цифру.

Двоичный код длиной имеет значений. При количество двоичных кодов длиной 3 недостаточно для кодирования 10 десятичных цифр. При количество значений вектора превышает необходимое их число на 6. Поэтому при существует избыточность кодов, и некоторые из них не используются для кодирования десятичных цифр или для кодирования отдельных цифр используют 2 и более кодов. В последнем случае имеет место неоднозначность представления десятичных цифр двоичными кодами. Наличие в записи двоично-десятичного числа кода неиспользуемого для кодирования десятичных цифр следует рассматривать как ошибку в записи числа.

Выбор кодов для кодирования цифр можно выполнять произвольно, но так чтобы код, использованный для кодирования одной цифры, не использовался для кодирования другой. Очевидно, что даже при минимальном количество возможных вариантов способов кодирования весьма велико, особенно если допускать неоднозначное кодирование цифр.

В табл.4.11 приведены некоторые варианты способов кодирования десятичных цифр двоичными кодами.

Таблица 4.11

Десятичная

цифра

Двоичные коды десятичных цифр

Произвольный

8421

2421

8421+6

8421+3

Код

Джонсона

1

2

3

4

5

6

7

8

0

1

2

3

4

5

6

7

8

9

1000

0001

1110

0110

1111

1101

1100

0011

0100

0010

0000

0001

0010

0011

0100

0101

0110

0111

1000

1001

0000

0001

0010

1001

1010

0101

1100

0111

1110

1111

0110

0111

1000

1001

1010

1011

1100

1101

1110

1111

0011

0100

0101

0110

0111

1000

1001

1010

1011

1100

0110

0101

0100

1011

1010

1001

1000

1111

1110

1101

00000

00001

00011

00111

01111

11111

11110

11100

11000

10000

В колонке 2 приведен вариант способа кодирования десятичных цифр, при конструировании которого выбор кодов выполнялся произвольно, причем 6 кодов: 0000; 0101; 0111; 1001; 1010; 1011 для кодирования цифр не использованы. Поэтому запись 1111 0000 0001 не является числом, а запись 1111 1110 0001 является двоично-десятичным кодом числа без знака 42110. Для кодирования и декодирования десятичных чисел этим способом необходимо помнить таблицу кодирования, что сильно осложняет процессы преобразований.

В колонках 3-7 коды выбраны не случайно. Конструктор, выбирая код для кодирования десятичной цифры, придерживался некоторого правила.

Коды в колонке 3 выбирались так, чтобы их количественный эквивалент был равен количественному эквиваленту кодируемой десятичной цифры. При декодировании цифр этим способом нет необходимости помнить таблицу кодирования. Можно выполнять подсчет количественного эквивалента кода цифры.

Коды в колонке 4 выбирались аналогично, но вместо весов разрядов 8421 выбраны веса 2421. Например, количественный эквивалент кода 1010 в колонке 4 равен .

Коды колонок 3 и 4 называют взвешенными кодами. Подобных кодов существует много, например код с весами разрядов 5211 или 4221 или 1125. Взвешенные коды могут иметь отрицательные веса некоторых разрядов, например . Закодируйте в коде все десятичные цифры.

В коде 2421 колонки 4, так же как и в коде 8421, не использованы 6 кодов. Однако можно определить код 2421 так, что все 16 кодов будут использоваться. Для этого достаточно разрешить запись любого кода из 16 возможных. Тогда, например цифра 4 может быть представлена двумя кодами: 0100 и 1010, а цифра 5 – кодами: 1011 и 0101. Ничего подобного нельзя сделать в коде 8421, так как количественный эквивалент любого неиспользованного кода превышает 9. Код 2421 интересен так же тем, что содержит минимально возможные веса разрядов.

Коды в колонках 5 и 6 называют взвешенными смещенными кодами. Если сопоставить коды одной строки в колонках 3 и 5, то не трудно видеть, что код в колонке 5 выбран на 6 большим, чем в колонке 3. Значение 6 называют смещением. Смещение кода в колонке 6 равно 3.

Код в колонке 7 взвешенный со смещением (-2). Значение кода больше значения кодируемой им цифры на 2. Например, код 1001 имеет значение , что на 2 больше кодируемой им цифры 5.

Код Джонсона имеет длину 5 бит. Этот код интересен тем, что для увеличения значения цифры на 1 достаточно сдвинуть исходный код на 1 разряд влево с занесением в младший разряд цифры инверсной цифре выдвигаемой из старшего разряда. Например, для увеличения цифры 2 на 1 достаточно сдвинуть ее код 00011 влево с занесением инверсии 0 старшего разряда в младший разряд. Действительно, получим 00111 – код цифры 3.

Для уменьшения цифры на 1 достаточно сдвинуть ее код на разряд вправо с занесением в освобождающийся старший разряд инверсии цифры выдвигаемой из младшего разряда. Например, сдвиг вправо кода 11111 (5) приведет к получению кода 01111 (4).

Десятичные числа со знаком в двоично-десятичных кодах 8421; 8421+6 или 8421+3 могут быть представлены в форматах рис.3-2 или рис.3-3 с одним битом знака 0 (+) и 1 (–). Поля целого и дробной части состоят из позиций десятичных цифр. Каждая позиция десятичной цифры включает четыре бита, в которые записан двоичный код десятичной цифры.

Двоично-десятичные числа могут быть записаны в формат в прямом, обратном или дополнительном коде. Например, число , дополнение которого до равно , будет записано в дополнительном коде в формат рис.3-2 как 1|12|540. Если это десятичное число представлено в двоично-десятичном коде 8421, то его запись в формате с двумя позициями целого и тремя позициями дробной части

1 | 0001 0010 | 0101 0100 0000

Здесь позиции двоично-десятичных кодов цифр разделены пробелами для наглядности.

Конструктор цифровых устройств в зависимости от их функции выбирает такой способ кодирования десятичных цифр, который позволяет обеспечить минимум затрат оборудования, максимальное быстродействие и/или иные показатели качества проектируемого изделия в условиях множества ограничений. При конструировании устройств, выполняющих арифметические операции с десятичными числами, можно использовать любой способ кодирования цифр и хранить таблицы сложения, вычитания и умножения двоично-десятичных цифр в предназначенных для этого устройствах памяти. Однако размерность этих таблиц 1010 велика, что требует большого объема памяти и, следовательно, усложняет устройства.

Достоинство двоичной системы счисления в том, что указанные таблицы имеют минимальную размерность 22. Поэтому целесообразно выбирать такой способ кодирования десятичных цифр двоичными кодами, который позволяет вычислять сумму, разность или произведение десятичных цифр используя двоичные таблицы. В связи с этим получили распространение двоично-десятичные коды 8421; 8421+6 или 8421+3.

В разделе 3.1.1.4 отмечена низкая эффективность представления десятичных чисел при кодировании десятичных цифр двоичными кодами. Чтобы ее повысить выполняют совместное кодирование пар цифр десятичного числа двоичным кодом. При таком способе кодирования каждой паре цифр десятичного числа, имеющей 100 значений, приводят в соответствие 7 разрядный двоичный код, имеющий 128 значений. “Лишние” 28 двоичных кодов являются избыточными. Совместное кодирование пары десятичных цифр позволяет экономить 1 бит. Если десятичное число имеет пар десятичных цифр, то будет сэкономлено бит.

Стандарт IEEE 754-2008 [11] рекомендует применять для кодирования мантиссы десятичных чисел в форматах с плавающей точкой два варианта кодирования троек десятичных цифр 10 разрядным двоичным кодом. Совместное кодирование тройки десятичных цифр позволяет экономить 2 бита.