При делении чисел в прямом коде производится деление чисел без знаков и отдельно производится вычисление знаков частного и остатка. При этом остатку присваивается знак делимого. Знак частного определяется по результатам сравнения знаков делимого и делителя. Частному присваивается положительный знак, если знаки делимого и делителя совпадают.
Пример. Деление целых чисел без знака с восстановлением отрицательных остатков:
А = 3810 = 100110(2) делимое (число без знака),
В = 510 = 101(2) делитель (число без знака),
С – частное от деления (число без знака),
В модифицированном дополнительном коде (- В)=11 1011(2)
№
цикла
Делимое/
частичный остаток
Делитель
Частное
Комментарии
0,0100110
+1,1011 .
1,1111
+0,0101
0,0100110
Исходное состояние
Пробное вычитание (дополнительный код)
Результат отрицательный (переполнения нет)
Восстановление остатка.
Остаток восстановлен
0,100110
+1,1011
0,010010
Сдвиг делимого,
Первое вычитание (дополнительный код)
Результат положительный. Цифра частного 1
0,1001
+1,1011 .
0,0100
Сдвиг делимого
Второе вычитание (дополнительный код)
Результат положительный. Цифра частного 1.
0,1000
+1,1011
0,0011
Сдвиг делимого
Третье вычитание)
Результат положительный. Цифра частного 1
Результат деления 100110 (3810) на 101(510):
частное – 111 (710), остаток – 011(310) (числа без знаков).
Результат :
частное С = 111(2), =7(10)(число без знака).
остаток – 0011(2) =3(10) (число без знака).
Восстановление отрицательных остатков делает алгоритм деления нерегулярным. Для избавления от нерегулярности алгоритма деления используют схемы деления без восстановления отрицательных остатков.
В схемах деления без восстановления отрицательных остатков отрицательные остатки фиксируются, но их восстановление переносится на следующий цикл. В следующем цикле восстановление отрицательного остатка совмещается с очередным вычитанием сдвинутого частичного остатка.
Если при очередном вычитании получился отрицательный частичный остаток (А–В) = а<0, то его восстановление заключается в операции а + В.
Для определения следующей цифры частного восстановленный частичный остаток сдвигается влево на один разряд, что равносильно умножению его на два :
2 (а + В) = 2а +2В.
После этого Далее из этой величины, для определения следующей цифры частного, вычитается делитель:
2а +2В – В = 2а + В.
Таким образом, восстановление отрицательного остатка можно совместить с определением очередной цифры частного, для этого в последующем цикле вычитание делителя из сдвинутого частичного остатка заменяется суммированием.
В случае, если последний остаток окажется отрицательным, то его следует восстановить путем сложения с делителем.
Пример: Деление целых чисел без восстановления отрицательных остатков.
А = 55(10) = 110111(2) делимое (число без знака),
В = 7(10) = 111(2) делитель (число без знака),
С – частное от деления (число без знака).
№
цикла
Делимое/
частичный
остаток
Делитель
Частное
Комментарии
00.110000
+11.001 .
11.111000
00.111
Исходное состояние
Пробное вычитание (дополнительный код)
Результат отрицательный. (Переполнения нет)
11.11000
+00.111 .
00.10100
00.111
Сдвиг отрицательного делимого влево и вместо вычитания – сложение с делителем.
Результат положительный, цифра частного = 1.
01.0100
+11.001 .
00.0110
00.111
Сдвиг положительного делимого влево
и вычитание (дополнительный код) делителя.
Результат положительный, цифра частного = 1.
00.0110
+11.001
11.110
00.111
Сдвиг положительного делимого влево
и вычитание (дополнительный код) делителя.
Результат отрицательный, цифра частного = 0.
11.110
00.111
00.110
00.111
Восстановление отрицательного остатка.
Результат деления 110111 на 101:
частное – 110, остаток – 0110. (числа без знаков).
Результат :
Частное С = 110(2) = 6(10), (число без знака).
остаток – 0110(2) =6(2), (число без знака).
Блок схема алгоритма деления целых чисел без восстановления отрицательных остатков представлена на рис. 5.8.
Рис.5.8. Блок схема алгоритма деления целых чисел без знаков (в прямом коде) без восстановления отрицательных остатков.