Невосстанавливающий алгоритм деления

Кто-нибудь знает шаги для деления двоичных целых чисел без знака с использованием невосстанавливающего деления?

Трудно найти хорошие источники в Интернете.

то есть если A = 101110 и B = 010111

как найти A divided by B в невосстанавливающем делении? Как выглядят регистры на каждом шаге?

Спасибо!


person CyberShot    schedule 26.08.2012    source источник
comment
@RaymondChen, неверные результаты   -  person Imago    schedule 17.02.2020


Ответы (2)


(Мой ответ немного запоздалый ответ. Но я надеюсь, что это будет полезно для будущих посетителей)

Алгоритм для невосстанавливающего деления приведен на изображении ниже:

введите здесь описание изображения

В этой задаче Делимое (A) = 101110, т.е. 46, а Делитель (B) = 010111, т.е. 23.

Инициализация:

Set Register A = Dividend = 000000
Set Register Q = Dividend = 101110
( So AQ = 000000 101110 , Q0 = LSB of Q = 0 )
Set M = Divisor = 010111, M' = 2's complement of M = 101001
Set Count = 6, since 6 digits operation is being done here.

После этого запускаем алгоритм, который я показал в таблице ниже:

В таблице SHL(AQ) denotes shift left AQ by one position leaving Q0 blank.

Точно так же квадратный символ в позиции Q0 обозначает it is to be calculated later

введите здесь описание изображения

Надеюсь все шаги понятны из таблицы!!!

person Abid Rahman K    schedule 05.02.2013
comment
Просто напоминание: недостаточно скорректировать остаток (A), если он окажется отрицательным: уменьшите частное (Q) на единицу. - person greybeard; 11.03.2018

1) Установите значение регистра A как 0 (N бит)
2) Установите значение регистра M как делитель (N битов)
3) Установите значение регистра Q как делимое (N битов)
4) Объединить A с Q {A,Q}
5) Повторить следующее число «N» раз (здесь N — количество битов в делителе):
  Если бит знака A равен 0,
   сдвинуть A и Q вместе влево на 1 бит и вычесть M из A,
  иначе сдвинуть A и Q вместе влево на 1 бит и прибавить M к A
  Теперь, если бит знака A равен 0, тогда установите Q[0] как 1, в противном случае установите Q[0] как 0
6) Наконец, если бит знака A равен 1, добавьте M к A.< br> 7) Назначьте A как остаток и Q как частное.

person Jhashank Gandhi    schedule 05.03.2018
comment
Кажется, это просто словесная (неполная) диаграмма из ответа Абида Рахмана К.. - person greybeard; 11.03.2018
comment
@greybeard: Если это точно (я не проверял), это полезно для людей, использующих программы чтения с экрана или другие технологии, которые не работают с изображениями текста. - person Peter Cordes; 20.05.2018
comment
(@PeterCordes: [putting into words] useful for [more than one purpose] был там, сделал это. Не мой голос против.) - person greybeard; 20.05.2018
comment
@greybeard, пожалуйста, проверьте его точность, и иногда шаги в пунктах дают лучшее объяснение по сравнению с блок-схемой. - person Jhashank Gandhi; 28.06.2018
comment
(Я не вижу смысла говорить мне: я сделал то же самое в других вопросах (и даже заявил об этом выше), я не голосовал против, я не считаю этот ответ бесполезным (наведите указатель мыши на треугольник отрицательного голосования).) - person greybeard; 28.06.2018