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

Это наводит на следующую мысль.

Если сомножители содержат разряды с весами от 2 до 2 , то произведение содержит разряды с весами от до 2-2т При этом т младших разрядов произведения с весами от 2~( + до 2 2 зависят только от цифр сомножителей, имеющих веса от 2 до 2 *; если бы в сомножителях появились какие-нибудь новые старшие цифры с весами 2 deg;, 2,..., то от этого младшие разряды произведения не изменились бы. Иное дело т старших разрядов произведения с весами от 2 до 2 ; если бы в одном из сомножителей появилась бы, скажем, цифра с весом 2 deg;, то при умножении на цифру другого сомножителя с весом- 2 получилась бы величина с весом 22~ = 2 , которая изменила бы соответствующий разряд произведения, и т. д. До тех пор, пока мы имеем дело только с положительными числами, разряды с весами 2 , 2, ... всегда содержат нули; не принимая их во внимание мы никакой ошибки не вносим. Если же появляются отрицательные сомножители, представленные дополнительным кодом, то источником ошибок в псевдопроизведении является, может быть, именно то обстоятельство, что мы пренебрегаем цифрами старших разрядов.

Попробуем поэтому поступить следующим образом. Будем считать, что знаковый разряд имеет свой естественный вес + 2 = 1; слева от него припишем к каждому из сомножителей еще т разрядов с естественными весами 2, 2, 2* , а относительно разряда знака будем полагать, что он находится еще левее, чем старший из добавочных разрядов и имеет вес -2 +. Ясно, что поскольку сомножители по абсолютной величине все-таки меньше единицы, то в положительных числах все добавочные разряды будут содержать нули, а в отрицательных числах - единицы. Произведение таких (2т + 1)-разрядных чисел содержит вообще 4т + 2 разрядов, из которых младшие 2т + 1 разрядов должны получиться сразу правильными без всякой дополнительной коррекции; только эти 2т + 1 разрядов нас в сущности и интересуют.

Примеры.

1) (- 7/16) X 11/16 = - 77/256, - 7/16 = 1.1001, -h 11/16 = 0.1011, - 77/256 = 1.10110011.



Дополним каждый из сомножителей четырьмя (поскольку m = 4) цифрами слева: отрицательный - четырьмя единицами, положительный - четырьмя нулями - и выполним умножение обычным способом:

11111.1001 00000.1011

11111.1001 111111 001 11111100 1

00000101011011 ООН

Младшие разряды произведения получились сразу правильными (они вьщелены жирньш шрифтом). Старшие разряды нас не интересуют.

2) 11/16 X (-7/16) =-77/256

00000.1011 11111.1001

00000 1011 00000101 1 000001 ОН 000001011 000001011 000001011 000001011

00000101011011 ООН

Результат тот же, что прежде.

3) (-7/16) X (-11/16) = -f77/256,

-7/16=1.1001, -11/16= 1.0101, -f77/256 = 0.01001101.



Поступая аналогично предьщущему, получим

П1П.1001 1ПП.0101

mil 1001 111111001 111111001 111111001 111111001 . 111111001 111111001

11110111000100 1101

Правильность приведенного алгоритма можно проверить и более строго. Предположим, что знаковый разряд имеет свой естественный вес 4-1. При этом изображение некоторого сомножителя, скажем с, содержит величину а, если с gt; О, и величину 2 - с, если а lt; О (дополнение от величины с до единицы плюс единица в знаковом разряде: (1 - \а\) + 1 =2 - а). Когда изображение отрицательного сомножителя, скажем с, дополняется т единицами слева (в разрядах с весами от 2 до 2 ), то к нему тем самым добавляется величина 2* + -2, в результате чего получается величина 2 + - 2 4- (2 - с) == 2 + - \а\. Таким образом, если оба сомножителя (а и с) отрицательны, то по описанному выше методу выполняется умножение

(2 + 1 -а) X (2 +1-Vl),

если же, например, с lt; О, с gt; О, то выполняется умножение

(2 + 1 -с) X \с\. В первом случае в результате получим

22m + 2 2 +i(a +с)4-ас.

Поскольку I а I и \ с\ содержат разряды с весами не меньше 2- , величина 2 + (а 4- \с\) есть целое четное число. Отбрасывая в произведении все разряды слева от знакового (с весами 2 и старше), мы фактически ведем счет по модулю 2.



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