www.chms.ru - вывоз мусора в Балашихе 

Динамо-машины  Обратные коды 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 [ 179 ] 180 181 182 183 184 185 186 187 188 189

При выполнении корректирующего шага получим

.0001 1011 ООН 1100

- -3 - -3 .0001 1000 ООП 1001

что является изображением числа . 1839 - половины исходного числа. (Жирным шрифтом выделены цифры, определяющие характер коррекции в данной тетраде.)

Удвоение чисел в десятичном регистре удобнее производить, если десятичные числа изображаются двоичным кодом с излишком 3 (см. 1.6.2). Для перехода от обычного двоичного кода (8, 4,2, 1) к коду с излишком 3 достаточно произвести добавлениетроек по всем тетрадам, а для возврата к обычному двоичному коду - вычитание троек. Как мы увидим из дальнейшего, такой переход придется выполнять не более одного раза за всю операцию преобразования числа из одной системы счисления в другую. Зато цепи коррекции при использовании кода с излишком 3 получаются значительно проще, чем в коде laquo;8,4, 2,1 raquo;.

Итак, пусть в десятичном регистре находится некоторое число, представленное двоично-десятичным кодом с излишком 3. При сдвиге влево на 1 двоичный разряд в каждой тетраде происходит удвоение находившейся в ней ранее величины. Если десятичная цифра в данной тетраде была больше или равна 5, то в изображении кодом с излишком 3 она бьша больше или равна 8, т. е. содержала единицу в старшем двоичном разряде; при сдвиге влево эта единица передвинется в младший двоичный разряд соседней слева тетрады и увеличит на единицу находящуюся в ней величину, как этой требуется при удвоении десятичного числа. Однако результат сдвига влево нужно еще подправить, чтобы получить удвоенное исходное число. Прежде всего ясно, что по всем тетрадам следует вычесть тройки, так как при сдвиге влево мы получили вместо излишка 3 излишек 6. Крометого, в тех тетрадах, в которых исходная цифра была больше или равна 5, следовало после передачи единицы в соседний слева десятичный разряд уменьшить величину в данной тетраде на 10; в действительности же мы отбросили единицу двоичного разряда с весом 16; следовательно, в этих тетрадах нужно еще произвести добавление



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

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

Пример. Пусть в десятичном регистре находится число .1839. В двоично-десятичной форме (в коде с излишком 3) оно имеет вид

.0100 1011 ОНО 1100,

сдвиг влево на один разряд дает

.1001 ОНО 1101 1000.

При выполнении корректирующего шага получим

(0) .1001 ОНО 1101 1000

-ЗД+З -3 +3 .ОНО 1001 1010 1011

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

Теперь перейдем непосредственно к рассмотрению того, как в описываемом устройстве выполняются операции по преобразованию чисел из одной системы счисления в другую. В том виде, как устройство изображено на рис. 5-7, оно пригодно для операций с числами с фиксированной запятой - либо с дробными с запятой, фиксированной перед старшим разрядом, либо с целыми с запятой, фиксированной после младшего разряда. Операции над целыми и дробными числами будут идти по-разному. Алгоритмы преобразования, используемые в рассматриваемом устройстве, в точности те же, что и в 1.2.4 рекомендовались для вьшолнения преобразования вручную.



Для преобразования дробного числа из десятичной системы счисления в двоичную исходное число помещается в десятичный регистр. Если в исходной форме число было представлено простым двоичным кодом (кодом laquo;8, 4, 2, I raquo;), то через цепи коррекции выполняется добавление троек по всем тетрадам одновременно, в результате чего оно преобразуется в код с излишком 3. Двоичный регистр в исходном состоянии погашен. Затем т раз подряд повторяется цикл, состоящий из сдвига влево на 1 двоичный разряд в десятичном и двоичном регистрах и одного корректирующего шага в десятичном регистре (где т - количество разрядов в двоичном регистре). Каждый сдвиг влево с последующим корректирующим шагом эквивалентен удвоению числа в десятичном регистре. При этом за пределы десятичного регистра (в несуществующий разряд, находящийся слева от запятой) выходят по очереди цифры двоичного представления числа: при первом удвоении исходного числа - цифра, относящаяся к разряду с весом 1/2, при следующем удвоении содержимого десятичного регистра - цифра, относящаяся к разряду с весом 1/4, и т. д. Поскольку сдвиги в двоичном и десятичном регистрах выполняются всегда одновременно, а цепи сдвига замкнуты в кольцо, эти цифры вдвигаются в двоичный регистр со стороны младших разрядов. После т-го цикла первая двоичная цифра займет свое место в старшем разряде двоичного регистра, за ней в двоичном регистре будут расположены все остальные разряды двоичного представления числа.

Для преобразования дробного числа из двоичной системы в десятичную исходное число помещается в двоичный регистр. Десятичный регистр в исходном состоянии погашен. Затем m раз повторяется цикл, состоящий из сдвига вправо на 1 разряд в двоичном и десятичном регистрах и одного корректирующего шага в десятичном регистре (где m - количество разрядов в двоичном регистре). Если младшая цифра (а) в исходном (двоичном) представлении числа есть нуль, то после выполнения 1-го цикла в десятичном регистре сохранится нуль. Если же = 1, то после первого сдвига вправо в старшей тетраде десятичного регистра появится комбинация 1000, а после коррекции (вычитания тройки) получится комбинация 0101, соответствующая цифре laquo;5 raquo;; так как вес первой тетрады (старшего



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 [ 179 ] 180 181 182 183 184 185 186 187 188 189