10001 1-е частное произведение
00000 2-е частное произведение
10001 3-е частное произведение
10101.01 произведение
Если Вам совсем непонятно, что здесь написано, еще раз почитайте замечательную книжку [2].
Но этот пример можно трактовать и немножко по-другому. Рассмотрим, что здесь в основном происходит. Анализируется младший бит множителя. Если он равен 1 (как в данном примере), то в результат в качестве первого частного произведения записывается множимое. Затем анализируется следующий бит множителя. Если он равен 1, то нужно взять множимое и сдвинуть его на 1 разряд влево. Если же следующий бит равен 0 (как в данном примере), то нужно взять 0 и сдвинуть его на 1 разряд влево. В принципе, также поступают и при умножении «столбиком» в десятичной системе счисления, но там множимое приходится умножать на цифры от 0 до 9, а в двоичной системе счисления это умножение сводится к выбору 0 или множимого (это умножение на 0 и 1). Эти операции по нахождению частных произведений производят столько раз, сколько разрядов в множителе. Потом все частные произведения складывают и находят произведение.
Таким образом, умножение в двоичной системе счисления сводится к сдвигам и суммированию.
Отметим, что анализ множителя можно начинать со старшего разряда, только сдвиги частных произведений нужно будет производить вправо. Просто нам привычнее начинать с младшего значащего разряда, а микропроцессоры часто предпочитают обратную последовательность анализа. И микропроцессору не обязательно иметь команду умножения. Она может быть заменена набором команд анализа битов (обычно это логические команды), сдвига и суммирования. Это будет называться программной реализацией умножения. Правда, это займет у программиста некоторого времени и пространства в памяти программ. Поэтому аппаратное умножение всегда эффективнее, но не во всех процессорах были команды умножения…
4.4 Деление в двоичной системе счисления
Наверное, все, что было сказано про умножение, можно применить и к делению. Чтобы оставить Вам возможность проявить себя и показать, что деление сводится к вычитанию, здесь приведем пример, а выводы Вы получите самостоятельно.
(Это место для выводов и оставлено).
11111.1 | 11
11 1010.1
011
11
011
11
0