Page 34 - ЭВМ
P. 34

×
                      2. Второй случай –  x ≥ 0, y < 0. Имеем  z =           х y  = |x| ×( 2  n+1  – |y|) =
               = 2  n+1 |x| – |x| × |y| – неправильный результат, обозначим его как а. Пра-
               вильный результат должен быть  z  = 2            2(n+1)   – |x|×|y|, обозначим его как в.
               Поэтому необходимо скорректировать результат, для чего надо из в
                                                                                   – |x|), что является
               вычесть а, тогда а – в = 2       2(n+1)  – 2  n+1  |x| = 2  n+1  × (2  n+1
               дополнительным  кодом  множимого  x,  сдвинутым  на (n+1)  разрядов
               влево,  обозначим  его  как  с.  Чтобы  получить  правильный  результат,
               надо к результату а прибавить коррекцию с.
                      Например:

                               = 7        0111
                               =-3        0111
                                = -       0111
                                21
                                          00111
                                         000111
                                       +
                                           0111
                                          100011

                                       +  0100011
                                           0111

                                          1011011
                                          01011011
                                       +
                         коррекция        1001               (дополнительный код 7)
                                          1110101    результат (-21) в дополнительном  коде
                                              1

                      3. Третий случай – x < 0, y > 0. Аналогично второму случаю имеем:

                                  z =  х y  = (2  n+1  – |x|) × |y| = 2 |y| × |x| × |y|.
                                        ×
                                                                      n+1

                      Получили  неправильный  результат.  Чтобы  получить  правиль-
               ный  результат  z  = 2      2(n+1)   – |x|  × |y|,  надо  к  полученному  результату
                                                       n+1
               прибавить коррекцию: 2          n+1  × (2  – |y|) – дополнительный код множи-
               теля y, сдвинутый на (n+1) разрядов влево.

                      4. Четвертый случай – x < 0, y < 0. По определению дополни-
               тельного кода имеем следующее:

                    z =×  = (2       n+1           n+1           2(n+1)  – 2 n+1  |y| – 2 n+1  |x| + |x|×|y|.
                                                       – |y|) = 2
                                        – |x|) × (2
                         х y

                      Получили неправильный результат а, должно быть  z  = |x|×|y|.
                      Правильный  результат  будет  получен,  если  к  а  прибавить
               дополнительный  код  множимого  и  множителя,  сдвинутый  на (n+1)
               разрядов влево.



                                                           34
   29   30   31   32   33   34   35   36   37   38   39