Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Деление двоичных чисел, представленных в форме с фиксированной запятой.Содержание книги
Похожие статьи вашей тематики
Поиск на нашем сайте
Деление двоичных чисел во многом аналогично делению десятичных чисел. В универсальных вычислительных машинах, как правило, реализуется "школьный" алгоритм деления чисел. "Школьный" алгоритм деления заключается в том, что делитель на каждом шаге вычитается из делимого столько раз (начиная со старших разрядов), сколько это возможно для получения наименьшего положительного остатка. Тогда в очередной разряд частного записывается цифра, равная числу делителей, содержащихся в делимом на данном шаге. Иначе говоря, при делении операцию вычитания повторяют до тех пор, пока уменьшаемое не станет меньше вычитаемого. Число этих повторений показывает, сколько раз вычитаемое укладывается в уменьшаемом.
Например: разделим число 35 на 7: 1) 35 - 7 = 28, 2) 28 - 7 = 21, 3) 21 - 7 = 14, 4) 14 - 7 = 7, 5) 7 - 7 = 0. Ответ равен 5, т.к. процедура вычитания была повторена 5 раз.
Рассмотрим еще один пример: разделим 204(10) на 12(10), т.е. 11001100(2):1100(2):
делимое 11001100 | 1100 - делитель делитель 1100 | 10001 остаток 00001 - 0 - 0 - 0 - 1100
Двоичное, как и десятичное деление, начинается с анализа делимого (11001100) и делителя (1100). Сразу же обнаруживается, что делитель укладывается в 1100, а поэтому записывается 1 в старший разряд поля частного. Умножается делитель на 1 и вычитается из 1100, разность равна 0. Объединяется 0 остатка со значением следующего разряда делимого, равным 1. Поскольку делитель (1100) 0 раз укладывается в 1, записываем 0 в следующий по старшинству разряд поля частного, а число 1 объединяется со следующим разрядом делимого и т.д. до тех пор, пока делимое не оказывается исчерпанным. Конечно компьютер не может строить догадок относительно того, сколько раз делитель укладывается в том или ином числе, поэтому весь процесс деления сводится к операциям вычитания и сдвига. Продемонстрируем на том же примере, но сначала делитель (1100) представим в дополнительном коде, что позволит ограничиться сложением во всех случаях, когда нужно выполнять сложение или вычитание: 1100пр = 1. 0100д. Частное формируется в некотором регистре С, незаполненные разряды которого будем обозначать через Х. Начинаем вычитать делитель из делимого. Если остаток получается положительным, то в разряд частного записывается 1, в противном случае - 0.
0. 11001100 делимое 204 + 1. 01000000 делитель 12 0. 00001100 первый остаток
Первый (старший) бит частного равен 1, т.к. остаток получился положительным: С = 1ХХХХ. Далее сдвигается первый остаток на один разряд влево и из него вычитывается делитель:
0. 00011000 + 1. 01000000 1. 01011000 второй остаток
Остаток отрицательный, поэтому в следующий разряд частного записывается 0, С = 10ХХХ. Кроме того необходимо биты делителя вернуть обратно первому остатку, т.е. сложить делитель (в прямом коде) и второй остаток:
1. 01011000 + 0. 11000000 0. 00011000 сдвинутый первый остаток. Далее еще раз сдвигается сдвинутый первый остаток на один разряд влево и вычитается из него делитель:
0. 00110000 + 1. 01000000 1. 01110000 третий остаток
Третий остаток отрицательный, значит следующий (третий) разряд частного равен 0, С = 100ХХ. Поэтому возвращаем делитель третьему остатку,
1. 01110000 + 0. 11000000 0. 00110000 дважды сдвинутый первый остаток
Сдвигаем дважды сдвинутый первый остаток на один разряд влево и вычитаем делитель:
0. 01100000 1. 01000000 1. 10100000 четвертый остаток
Четвертый остаток опять отрицательный, поэтому С = 1000Х. Прибавляем делитель к четвертому остатку, результат сдвигаем на один разряд влево, а затем вновь вычитаем делитель:
0. 1100000 первый остаток после четвертого сдвига + 1. 0100000 0. 0000000 пятый остаток
Остаток положительный, значит С = 10001 = 17(10) - это и есть ответ. Такой метод деления называется делением с восстановлением остатка. Деление чисел, представленных в форме с фиксированной запятой можно также осуществить на двоичных сумматорах обратного и дополнительного кода. Перед выполнением самой процедуры деления чисел в формате с фиксированной запятой определяется и запоминается знак частного. Далее оба операнда представляются в прямом коде, а делитель еще и в дополнительном для того, чтобы вычитание делителя заменить сложением, и выполняется сама процедура деления по описанному выше методу с обязательным контролем переполнения разрядной сетки. Если знак частного отрицательный, то ответ, при необходимости, представляется в дополнительном коде. Например: разделим 35 на 5. 3510 = 0.1000112, 510 = 1012, 5д = 1.011д (в регистре С, как и в предыдущем примере, формируется частное): 0.100011 + 1.011000 1.111011 С = 0 восстанавливаем остаток до делимого. + 0.101000 0.100011 сдвигаем влево остаток. 1.00011 + 1.01100 0.01111 С = 01, сдвигаем влево остаток. 0.1111 + 1.0110 0.0101 С = 011, сдвигаем остаток. 0.101 + 1.011 0.000 С = 0111 = 710 Вычитание делимого продолжают столько раз, сколько разрядов отведено для частного.
Метод деления без восстановления остатка. Как уже отмечалось, основой выполнения деления является операция вычитания с целью получения остатка, знак которого определяет цифру частного. Алгоритм выполнения деления имеет следующий вид: X - Y = a0,
где a0 - это остаток. Если а0 0, то С = 1, если а0 < 0, то С = 0. Для определения следующей цифры частного необходимо выполнить следующие действия: при а0 0 надо 2а0 - Y = a1, а при а0 < 0 надо 2а0 + Y = a1. Как видно в данном случае знак остатка определяет не только очередную цифру частного, но и характер следующей процедуры: прибавления делителя к сдвинутому остатку, если этот остаток меньше 0, и вычитание делителя из сдвинутого остатка, если остаток больше или равен 0. Этот метод деления получил название деления без восстановления остатка. Рассмотрим пример: разделим 3510 на 510, т.е. 0.1000112 на 1012 0.100011 + 1. 011000 дополнительный код 5 (т.е. вычитание 5) 1.111011 a0<0, С = 0 2a0 1.110110 + 0.101000 5 в прямом коде 0.011110 a1>0, С = 01 2a1 0.111100 + 1.011000 5 в дополнительном коде (т.е. вычитание 5) 0.010100 a2>0, С = 011 2a2 0.101000 + 1.011000 0.000000 a3 = 0, С = 0111 = 710
4.3.2. Деление двоичных чисел, представленных в форме с плавающей запятой.
При операции деления чисел, представленных в форме с плавающей запятой их мантиссы делятся, как числа с фиксированной запятой, а порядки вычитываются. В обоих случаях проверка на переполнение обязательна. Но, т.к. реально вычитываются характеристики чисел, то деление выполняется по следующей формуле:
A1: A2 = m12 : m22 = (m1: m2)2 .
Знак ответа определяется обычным образом. Если ответ получился ненормализованный, то выполняется процедура нормализации и округления ответа. Т.к. мантиссы операндов нормализованы, то возможны случаи, когда |mA| |mB|; |mA| < |mB|. В первом случае перед началом деления надо вычесть делитель из делимого и в целую часть мантиссы частного записать 1. Затем продолжать делить числа обычным методом. После получения частного очевидно, что оно не будет нормализованным. Значит надо нормализовать частное, т.е. в данном случае сдвинуть его на 1 разряд вправо, а к порядку частного добавить 1. Напомним, что при реализации алгоритмов математических операций в формате с плавающей запятой каждый раз, когда осуществляется та или иная процедура, затрагивающая характеристики операндов или результата, производится контроль над переполнением и исчезновением порядка, т.е. контролируется условие 0 r r max,
где r max = l + p max. Рассмотрим пример: A = 10 = 0,1010, pA = 4, B = 2 = 0,1, pB = 2. p = pA - pB = 2. mA = 0.1010, mB = 0.1, (mB)l = 1.1000. |mA| > |mB|. При первом вычитании mB из mA 1 записываем в целую часть частного: 0.1010 + 1.1000 а0 0.0010 С = 1,XX, далее, будем делить методом деления без восстановления остатка. 2а0 0.0100 + 1.1000 а1 1.1100 а1<0 С = 1,0 2a1 1.1000 + 0.1000 0.0000 a2 = 0 С = 1,01, сдвигаем вправо С = 0,101, p = p + 1 = 3.
В завершение обзора принципов организации арифметических действий с двоичными числами нужно отметить, что в Главе 11 подробно рассмотрены все алгоритмы арифметических процедур с числами в формах с фиксированной и плавающей запятой.
|
||||
Последнее изменение этой страницы: 2016-06-23; просмотров: 937; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.55.25 (0.009 с.) |