Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
с. работа - Логика.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
2.16 Mб
Скачать

Для кода д2

А = - 0,1100 0101 1001

В = + 0,1011 0111 1000

[А]0 = 1,0011 1010 0110

+

[B]0 = 0,1011 0111 1000

1,1111 0001 1110

+

1101 0011 1101

[С]0 = 1,1100 0100 1011

[С]пр= 1,0011 1011 0100

Отрицательные поправки вносятся в виде дополнения: 1101

Таким образом, код Д2, т. е. код с избытком 3, позволяет весьма просто формировать поразрядные дополнения до р — 1 = 9 и также просто выполнять алгебраическое сложение. Однако, как и код Д1, он требует коррекции результата, что увеличивает время реализации операций. Код Д2 обладает еще рядом полезных свойств. Например, цифры десятичной системы счисления, значения которых больше или равны пяти, отличаются тем, что в старшем разряде двоично-де­сятичного кода всегда присутствует единица. Благодаря этому свой­ству по значению только одного старшего разряда тетрады опреде­ляется необходимость округления. Этим же свойством можно восполь­зоваться для упрощения реализации ускоренного умножения.

6.3. Сдвиг д-кодов

При сдвиге Д-кода числа на один десятичный разряд необходимо предусмотреть сдвиг двоичных цифр сразу на 4 разряда. Правила сдвига остаются теми же, что и для двоичных дробей, т. е. сдвиг вправо ограничивается величиной допустимой ошибки, которую можно уменьшить путем округления сдвинутого числа. Для этого вводят дополнительный десятичный разряд (ДДР). При этом положительные дроби округляют добавлением числа 5 в ДДР, если цифра в нем боль­ше или равна 5. Округление отрицательной дроби, представленной в обратных Д-кодах, не производится. Округление в дополнительных Д-кодах производится только тогда, когда хвост числа больше 0,5 x 10 -n, где п — число основных десятичных разрядов. Операция сдвига Д-кода влево корректна до тех пор, пока не произойдет пере­полнение разрядной сетки.

Таблица 6.1

Цифра, сдвигаемая в данную тетраду

Цифра, сдвигаемая из данной тетерады

Поправка

-

-

0

0

1

1

0

1

0

1

0

1

П0=0001

П1=0010

П00=0110

П01=0111

П10=1001

П11=1010

При выполнении операций умножения и деления Д-кодов нередко возникает необходимость умножения или деления чисел на 2. Для умножения Д1 кода на 2 необхо­димо сдвинуть заданное число на один двоичный разряд влево. Поправки вносятся как и при сложении в коде Д1,т. е. если в i-й тетраде в результате сдвига возникла запрещенная комбинация или из i–й тетрады в (i + 1)-ю была выдвинута единица, то к i -й тетраде прибавляется поправка 0110 и цепи межтетрадных переносов не блокируются. В остальных случаях коррекция результата не производится.

Пример. Задано в коде Д1 число А = 0,15910 = 0,0001 0101 1001.

Сдвинуть его на один двоичный разряд влево

А = 0,0010 1011 0010

+0110 +0110

0,0011 0001 1000

Т аким образом, А = 0,0011 0001 1000 = 0,31810

Пример. Задано в коде Д1 число А = 0,15810 = 0,0001 0101 1000.

Сдвинуть его на один двоичный разряд вправо

А = 0,0000 1010 1100

+ 1101 1101

0,0000 0111 1001

Т аким образом, А = 0,0000 0111 1001 = 0,07910.

При делении кода Д1 на 2 необходимо сдвинуть его на один двоичный разряд вправо и вычесть поправку 0011 из тех тетрад, в кото­рые сдвинулась единица из предшествующей или прибавить поправку 1101 с блокированием возникающего межтетрадного переноса.

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

i-й тет­раде прибавляется 0011, если же единица в (i +1)-ю тетраду не сдви­гается, то к i -й тетраде прибавляется 1101. При этом цепи межтетрадных переносов блокируются

Пример. Задано в коде Д2 число А = 0,15910 = 0,0100 1000 1100.

Сдвинуть его на один разряд влево

А =0,1001 0001 1000

+ 1101 0011 0011

0,0110 0100 1011

Таким образом, А = 0,0110 0100 1011 = 0,31810.

При делении кода Д2 на 2 необходимо, сдвинуть его на один дво­ичный разряд вправо и прибавить поправку согласно табл. 6.1.

Табл 6.1 получается на основании следующих соображений. Если цифра а, записанная в данной тетраде, четная, т. е, а = 2b, то ее дво­ичный код будет нечетным, так как он равен а + 3 = 2b + 3. Если a — нечетное, т.е. а = 2b + 1, то двоичный код в данной тетраде будет четным, так как он равен 2b + 4.

В старшую тетраду ничего не сдвигается, но из нее в соседнюю справа тетраду сдвигается либо 0, либо 1. Если сдвигается 0, значит а = 2b + 1, т. е код в ней четен и равен 2b + 4. После сдвига oн cтанет равен b + 2, а должен быть равным b + 3, следовательно, необходима поправка на величину П0=0001. Если из старшей тетрады сдвигается 1, то а четно (а = 2b), и после сдвига должен быть

код b + 3. Сдвигается же код ½ + 3) = ½ (2b + 3) = b + 1 +½. Здесь ½ переходит в виде 1 з тетраду справа, а поправка, оче­видно, будет равна П1 = 0010.

Рассмотрим сдвиг любой тетрады. Если в нее сдвигается 0, то это значит, что в нее должна попасть 1 с весом 5 (10/2). Если из тетрады сдвигается 0, то в ней число нечетно, т. е. а = 2b + 1, а код его чет­ный, т. е. равен 2b + 1+ 3 = 2b + 4. После сдвига в тетраде будет код b+ 2, а должно быть b+ 3. Поэтому поправка в этом случае составит П00 = (5+1)10 = 0110. Если же из данной тетрады сдви­гается код 1, то в ней число четно, т. е. а = 2b, а код нечетный и равен 2b+ 3. После сдвига в тетраде получим (2b+ 3)½ = b+1 + ½ . При этом ½ в виде 1 сдвигается в соседнюю справа тетраду, а в данной остается код b+ 1, то должно быть b + 3. Отсюда поправка равна П01 = (5 + 2)10 = 0111. Если в данную тетраду сдвигается код 1, то это значит, что в нее должен попасть 0, так как десятичная цифра в предыдущей тетраде четная (цифра, а не ее код!). Эта 1 имеет вес 8, поэтому в поправку необходимо ввести отрицательную величину (- 8). Если из данной тетрады сдвигается 0, то код в ней четен и равен 2b+ 4. После сдвига он равен b + 2, т. е. результирующая поправка должна составить 1 - 8 = - 7. Отрицательные поправки обычно вносятся в виде допол­нений до 16, поэтому

П10 = 1001. Если из данной тетрады сдвигается 1, значит а четно, т. е. а = 2b, а код в ней нечетен и равен 2b + 3. После сдвига получим код b+ 1 + ½ . При этом ½ переходит в виде 1 в соседнюю справа тетраду, а в данной остается b + I, т. е. необ­ходима поправка кода тетрады на величину 2 - 8 = - 6, которая также задается в виде дополнения до 16, т. е. П11 = 1010. Необходи­мо помнить, что в коде Д2 при реализации поправок цепи межтетрадных переносов блокируются.

Если данная тетрада младшая, то сдвигаемая из нее вправо двоич­ная цифра будет представлять собой инверсный код остатка от деле­ния числа на 2: если цифра кода остатка 0, то цифра остатка числа равна 1 и наоборот.

Пример. Задано в коде Д2 А = 52610 = 1000 0101 1001, сдвинуть его на одна двоичный разряд вправо

A = 0100 0010 1100 1

+ 0001 0111 1010

0101 1001 0110

Т аким образом, A = 0101 1001 0110 = 526 : 2 = 26310.