Пример деления двоичных чисел методом без восстановления остатка

Ваша задача будет решена с вашими исходными данными OnLine и бесплатно



Задача:

Разделить число A = 21310 на число B = 1710 в двоичной системе счисления, методом без восстановления остатка.


Решение:

1) Переведем числа в двоичную систему счисления (работать будем только с модулями чисел, знак результата получим из анализа знаков исходных чисел):

    21310 = 110101012
    1710 = 100012

2) Впишем делимое A в 16-ти разрядный регистр, начиная с младших разрядов (нумерация разрядов начинается с нуля). В недостающие разряды записываем нули.

Разр.1514131211109876543210
A: 0000000011010101
Обратите внимание! Так как для выполнения деления требуется производить операцию вычитания, это требует использования знаковой ариaметики. И поэтому в нашем случае 15-й разряд является знаковым (0 - соответствует положительному числу, 1 - отрицательному), а старшим разрядом числа является 14-й разряд.

3) Впишем делитель В в 16-ти разрядный регистр, начиная с младших разрядов. В недостающие разряды записываем нули.

Разр.1514131211109876543210
B: 0000000000010001
Здесь также как и с числом A 15-й разряд является знаковым, а старшим разрядом числа является 14-й разряд. Эти знаковые разряды будут показывать нам знаки, образующихся в процессе деления, частичных остатков. Они не имеет никакого отношения к знакам исходных операндов и знаку результата, а играют чисто технологическую роль.

4) Предварительный сдвиг делителя. Сдвинем делитель B влево так, чтобы позиция старшей значащей единицы, в нем, совпала с позицией старшей значащей единицы в делимом A. Количество необходимых для этого сдвигов запомним в числе k В нашем случае старшая значащая единица в делимом A расположена в 7-м разряде, a в делителе B - в 4-м разряде. Следовательно нам необходимо сдвинуть число B влево на 3 разряда (k = 3).
Сдвинутый делитель выглядит следующим образом :


Разр.1514131211109876543210
B: 0000000010001000
5) Так как в процессе деления множитель B придется не только прибавлять но и вычитать, то нам необходимо иметь число -B. Для этого представим B в дополнительном коде. Перевод в дополнительный код осуществим в два этапа:

5.1)Вначале получим обратный код. Для этого просто проинвертируем каждый разряд регистра (заменим "0" на "1", а "1" на "0").

Разр.1514131211109876543210
Bобр1111111101110111
5.2) Прибавим к числу в обратном коде единицу и получим дополнительный код.

Разр.c1514131211109876543210
111
Bобр1111111101110111
+0000000000000001
Bдоп1111111101111000

Таким образом -B = Bдоп

6) Процесс деления будет следующий:

6.1) Вычитаем из делимого А делитель В (т.е. прибавляем ).

6.2) Анализируем знак полученного частичного остатка (15-й разряд). В регистр результата записываем "0" если остаток отрицательный и единицу в противном случае. Помним, что отрицательному числу соответствует наличие единицы в 15-м разряде и наоборот.

6.3) Сдвигаем частичный остаток на один разряд влево. При этом крайний правый (младший) разряд заполняется нулем, а знаковый разряд (15-й) в процессе сдвига не участвует.

6.4) Прибавляем к частичному остатку делитель В если остаток отрицательный либо вычитаем делитель в противном случае.

6.5) Анализируем знак полученного частичного остатка (15-й разряд). В регистр результата записываем "0" если остаток отрицательный и единицу в противном случае.

6.6) Действия описанные в пунктах 6.3-6.5 выполняем k раз (если k=0, то ни разу не выполняем).
Весь процесс деления выглядит следующим образом :


 Разр.c1514131211109876543210
111111111111
ЧастноеА0000000011010101
- B1111111101111000
1=0000000001001101
1111111111111
<--0000000010011010
- B1111111101111000
1=0000000000010010
11
<--0000000000100100
- B1111111101111000
0=1111111110011100
111
<--1111111100111000
+ B0000000010001000
0=1111111111000000

Здесь в колонке "Частное", сверху вниз, записаны разряды искомого частного, начиная со старших. Обратите внимание - значение разряда частного - это просто иверсия 15-го (знакового) разряда частичного остатка.
В следующем столбце - символика действий предпринимаемых в зависимости от знака частичного остатка. Смысл этих символов следующий:
    + В - делитель В прибавляется к регистру делимого A;
    - В - делитель В вычитается из регистра делимого A (технически здесь прибавляется Вдоп );
    <-- - частичный остаток сдвигается на один разряд влево;
   " = " - показывается значение частичного остатка полученного после сложения.

7) Определяем остаток от деления. Для этого анализируем последний частичный остаток. В нашем случае он равен "1111111111000000".
7.1) Анализируем знак остатка (15-й разряд). В знаковом разряде содержится единица, значит требуется коррекция остатка. Для коррекции прибавим к нему делитель B.


Разр.c1514131211109876543210
111111111
1111111111000000
+ B0000000010001000
=0000000001001000

7.2) Так как в процессе деления частичные остатки были сдвинуты 3 раза влево, то для получения верного значения последний полученный остаток необходимо сдвинуть 3 раза вправо (вернуть на место). После сдвига имеем:


Разр.1514131211109876543210
0000000000001001

8) Определяем знак результата. Если знаки исходных операндов одинаковы, то результирующее частное положительно и наоборот. В нашем случае знаки совпадают, следовательно результирующее частное положительно.



Ответ:    110101012 : 100012 = 11002 и 10012 в остатке.

или в десятичной системе счисления: 21310 : 1710 = 1210 и 910 в остатке.





...поделить MOИ чиcла в двоичной системе


...к списку решаемых задач