Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методичка.doc
Скачиваний:
374
Добавлен:
30.04.2013
Размер:
824.32 Кб
Скачать

Примеры двоично-десятичных кодов

Десятичная цифра

Двоично-десятичный код

8421

5421

8421+3

8421+6

5121

2421

0

0000

0000

0011

0110

0000

0000

1

0001

0001

0100

0111

0001

0001

2

0010

0010

0101

1000

0010

0010

3

0011

0011

0110

1001

0011

0011

4

0100

0100

0111

1010

0111

0100

5

0101

1000

1000

1011

1000

1011

6

0110

1001

1001

1100

1001

1100

7

0111

1010

1010

1101

1010

1101

8

1000

1011

1011

1110

1011

1110

9

1001

1100

1100

1111

1111

1111

2.2. Сложение одноразрядных десятичных числе со знаком в двоично-десятичном коде

Разработка алгоритма сложения чисел в заданном коде может осуществляться двумя способами. Первый способ заключается в рассмотрении свойств заданного кода и анализа этих свойств. На основании проведенного анализа можно сделать вывод о величине коррекции для кода и критериях ввода этой коррекции.

Пусть

  • T(A) = α8 α4 α2 α1 — тетрада, изображающая одноразрядное десятичное число А;

  • T(B) = β8 β4 β2 β1 — тетрада, изображающая одноразрядное десятичное число B;

  • T(C) = X8 X4 X2 X1 — результат от сложения чисел A и B.

При этом

  • Пi-1 — перенос из предыдущего десятичного разряда (тетрады);

  • Пi — перенос в следующий десятичный разряд (тетраду).

Все рассмотренные ниже примеры приведены в коде 8421.

Если T(A) + T(B) + Пi-1 < 10, то результат всегда получается правильный и никакой коррекции не требуется:

+

7

+

0011

1

0001

8

1000

Примечание: все действия выполняются с соблюдением правил двоичной арифметики:

  1. 0 + 0 = 0

  2. 0 + 1 = 1

  3. 1 + 0 = 1

  4. 1 + 1 = 10

В случае T(A) + T(B) + Пi-1 ≥ 10, результат всегда получается неверный. Причём, здесь можно рассмотреть два варианта:

  1. 10 ≤ T(A) + T(B) + Пi-1 ≤ 15

  2. 15 < T(A) + T(B) + Пi-1

В первом варианте результат от сложения T(C) — величина, которая не используется в коде 8421:

+

8

+

1000

5

0101

13

1101

На самом деле, величина 13 должна представляться как Пi = 1 и T(C) = 0011, то есть для коррекции полученного результата надо организовать перенос "1" в следующую тетраду, а из полученного значения вычесть величину 1010. Однако, поскольку вычитание в прямом виде невозможно, заменим его сложением полученной величины 1101 и величины 1010 в дополнительном коде 0110. Тогда

+

1101

0110

0011

Единицу переноса, которая при этом получается, можно или отбросить, или использовать как единицу переноса в следующую тетраду. В дальнейшем будем использовать данную единицу как единицу переноса.

Во втором варианте результат от сложения T(C) — величина, которая используется в коде 8421:

+

9

+

1001

7

0111

16

0000

Однако этот результат неверен и требует коррекции. Нетрудно видеть, что для получения правильного результата из величины 16 надо вычесть 10 (величины десятичные). Вычитание, как и в предыдущем случае, заменим сложением, взяв интересующую величину в дополнительном коде.

Таким образом, и в данном варианте величина коррекции будет 0110 (двоичная величина). При этом полученная единица переноса в следующую тетраду сохраняется.

Обобщив все эти случаи, можно получить алгоритм сложения чисел в коде 8421. Он будет следующим:

  • если результат от сложения двух одноразрядных десятичных чисел с учетом переноса из предыдущего разряда меньше десяти, то коррекция не требуется. При этом результат получается в коде 8421;

  • если результат от сложения двух одноразрядных чисел с учетом переноса из предыдущего разряда больше или равен десяти, то коррекция требуется. Корректирующая величина будет 0110.

При этом результат получается в виде комбинации, которая не используется в коде 8421, или в результате присутствует единица переноса в следующую тетраду.

На основании этого алгоритма можно выработать правило введения корректирующей величины:

корректирующую величину 0110 необходимо прибавить к полученному результату от сложения T(A) и T(B), если результат — запрещенная величина или если есть перенос в следующий разряд Пi = 1. В первом случае после введения коррекции получается величина Пi = 1, которую необходимо сохранить для получения правильного результата. Во втором случае эта величина получается сама собой.

Однако, не всегда удается получить алгоритм сложения, используя только свойства кода. В этом случае можно использовать другой подход. Он заключается в следующем:

Строится таблица соответствия результатов сложения десятичных и двоично-десятичных чисел. Таблица симметрична относительно главной диагонали.

Таблица 2.2.1.

Таблица соответствия для кода 8421

Код 8421

0

0000

1

0001

2

0010

3

0011

4

0100

5

0101

6

0110

7

0111

8

1000

9

1001

0

0000

0000

0000

0001

0001

0010

0010

0011

0011

0100

0100

0101

0101

0110

0110

0111

0111

1000

1000

1001

1001

1

0001

0001

0001

0010

0010

0011

0011

0100

0100

0101

0101

0110

0110

0111

0111

1000

1000

1001

1001

0110

1010

1.0000

2

0010

0010

0010

0011

0011

0100

0100

0101

0101

0110

0110

0111

0111

1000

1000

1001

1001

0110

1010

1.0000

0110

1011

1.0001

3

0011

0011

0011

0100

0100

0101

0101

0110

0110

0111

0111

1000

1000

1001

1001

0110

1010

1.0000

0110

1011

1.0001

0110

1100

1.0010

4

0100

0100

0100

0101

0101

0110

0110

0111

0111

1000

1000

1001

1001

0110

1010

1.0000

0110

1011

1.0001

0110

1100

1.0010

0110

1101

1.0011

5

0101

0101

0101

0110

0110

0111

0111

1000

1000

1001

1001

0110

1010

1.0000

0110

1011

1.0001

0110

1100

1.0010

0110

1101

1.0011

0110

1110

1.0100

6

0110

0110

0110

0111

0111

1000

1000

1001

1001

0110

1010

1.0000

0110

1011

1.0001

0110

1100

1.0010

0110

1101

1.0011

0110

1110

1.0100

0110

1111

1.0101

7

0111

0111

0111

1000

1000

1001

1001

0110

1010

1.0000

0110

1011

1.0001

0110

1100

1.0010

0110

1101

1.0011

0110

1110

1.0100

0110

1111

1.0101

0110

1.0000

1.0110

8

1000

1000

1000

1001

1001

0110

1010

1.0000

0110

1011

1.0001

0110

1100

1.0010

0110

1101

1.0011

0110

1110

1.0100

0110

1111

1.0101

0110

1.0000

1.0110

0110

1.0001

1.0111

9

1001

1001

1001

0110

1010

1.0000

0110

1011

1.0001

0110

1100

1.0010

0110

1101

1.0011

0110

1110

1.0100

0110

1111

1.0101

0110

1.0000

1.0110

0110

1.0001

1.0111

0110

1.0010

1.1000

Строки и столбцы таблицы соответствуют десятичным числам от 0 до 9 (см. таблицу 2.2.1).

Каждая клетка таблицы содержит:

  • корректирующую величину;

  • результат сложения соответствующих двоично-десятичных чисел по правилам двоичной арифметики;

  • корректный результат сложения, то есть результат, который должен получиться при сложении двоично-десятичных чисел.

Пусть имеет место пересечение цифр 7 и 6. В коде 8421 7 — это 0111, а 6 — это 0110.

От сложения этих величин в коде будет:

+

0111

0110

1101

Эта величина размещается в средней части пересечения. На самом деле 7 + 6 = 13 и в коде 8421 — это 1.0011, где в тетраде 0011 и "1" переноса в следующую тетраду.

Величина 1.0011 размещается в нижней части пересечения (см. таблицу 2.2.1).

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

Как правило, для широко используемых двоично-десятичный кодов бывает не больше двух корректирующих комбинаций, и критерий их ввода определяется:

  1. наличием или отсутствием запрещенной комбинации в результате;

  2. наличием или отсутствием переноса в следующую тетраду;

  3. определенное сочетание "1" и "0" в фиксируемых разрядах внутри тетрады.

Поскольку нельзя оперировать только с одноразрядными положительными числами, то надо уметь представлять многоразрядные числа с положительным и отрицательным знаком.

Если A - многоразрядное десятичное число со знаком плюс, то в прямом, обратном и дополнительном видах кодирования оно будет представлено следующим образом:

A = a a1 a2 a3 ... an

где ai — десятичное одноразрядное число, записанное в виде двоичной тетрады.

Если же A имеет знак минус, то для его представления можно использовать прямой, обратный и дополнительный код:

[A]пр. = 1. a1 a2 a3 ... an

[A]обр. = 1. a1 a2 a3 ... an

гдеai — дополнение до "9" в десятичной системе;

[A]доп. = 1. a1 a2 a3 ... an-1 an

гдеai — дополнение до "9" во всех десятичных разрядах, кроме младшего. В младшем разряде берётся дополнение до "10" (an).

Величина +875 в коде 8421 будет иметь вид: