деление двоичных чисел в дополнительном коде
Двоичный калькулятор онлайн
Данный калькулятор может производить следующие действия над двоичными числами:
Сложение двоичных чисел
Сложение двух двоичных чисел производится столбиком поразрядно. Начиная с младшего разряда (справа на лево), как и при сложении столбиком десятичных чисел. Но так как цифр всего две (0 и 1), их сложение происходит по следующим правилам:
Пример
Для примера сложим 1011 и 101:
+ | 1 | 0 | 1 | 1 |
1 | 0 | 1 | ||
1 | 0 | 0 | 0 | 0 |
Вычитание двоичных чисел
Вычитание двоичных чисел производится аналогично сложению – столбиком, но по следующим правилам:
Пример
Для примера вычтем из числа 1011 число 101:
− | 1 | 0 | 1 | 1 |
1 | 0 | 1 | ||
1 | 1 | 0 |
Умножение двоичных чисел
Умножение двоичных чисел производится в столбик аналогично умножению в десятичной системе, но по следующим правилам:
Пример
Для примера перемножим числа 1011 и 101:
× | 1 | 0 | 1 | 1 | |
1 | 0 | 1 | |||
+ | 1 | 0 | 1 | 1 | |
0 | 0 | 0 | 0 | ||
1 | 0 | 1 | 1 | ||
1 | 1 | 0 | 1 | 1 | 1 |
Деление двоичных чисел
Внешне деление двоичных чисел похоже на деление десятичных чисел, но тут есть свои нюансы: такое деление производится вычитанием делителя со сдвигом вправо, если остаток больше нуля. Чтобы понять этот процесс рассмотрим пример:
Деление двоичных чисел в дополнительном коде
Так же как и при умножении, здесь возможны два пути:
1) перевод операндов в прямой код, получение частного обычным способом и перевод его в дополнительный код перед записью в память;
2) деление операндов в дополнительном коде с получением частного в требуемом виде.
Второй путь так же прост, как и первый. Необходимо только управлять логикой образовании цифр частного, чему способствуют два обстоятельства:
1) делимое в процессе операции участвует всего лишь один раз, а дальше текущие остатки получаются автоматически;
2) нетрудно организовать получение цифр дополнительного кода отрицательного частного непосредственно в процессе деления путем передачи знаковых цифр остатков из СМ в регистр частного напрямую, минуя БИЦ.
Рассмотрим четыре возможных случая, определяемые комбинациями знаков дополнительных кодов операндов.
Деление производится как обычно: знак частного определяется путем сложения знаковых цифр операндов по модулю 2 и одновременно формируется дополнение модуля делителя до двух. Цифры частного получаются, как уже известно, путем инвертирования знаковых цифр остатков от деления в БИЦ.
Ход деления обычный с учетом следующих особенностей.
Псевдознаковая цифра частного (сигнал о возможном переполнении разрядной сетки) должна получаться в этом случае равной знаковой цифре первого остатка, так как здесь производится вычитание модуля делимого из модуля делителя в силу исходного сочетания знаков операндов. Значит знаковая цифра нулевого остатка должна поступать в регистр частного, минуя БИЦ, т. е. не инвертируясь.
Так как знак нулевого остатка имеет инверсное значение, то при продолжении деления обычным путем все другие остатки получаются также с инверсными знаками. Значит, в регистр частного также будут записываться инверсные цифры и в конце деления в нем образуется обратный код отрицательного частного. Для округления результата из него надо вычесть единицу разряда, а для перевода, его в дополнительный код к нему надо прибавить единицу в
разряд. Тогда прибавление единицы в
разряд произведет суммарное действие округления и перевода обратного кода в дополнительный.
Этот случай является зеркальным отображением предыдущего: псевдознаковая цифра частного получается как обычно путем инверсии знака первого остатка, а для того чтобы получить инверсные цифры частного, нужно брать их равными знаковым цифрам соответствующих остатков без инвертирования их в БИЦ. В конце деления необходимо добавить к разряду частного единицу для одновременного выполнения округления результата и перевода его в дополнительный код.
В этом случае все цифры частного (включая псевдознаковую) должны быть равны знаковым цифрам соответствующих остатков. На первом этапе деления одновременно с определением истинного знака частного определяется величина модуля делителя, т. е. возникает ситуация, сходная с начальными условиями 2-го случая. Значит, псевдознаковая цифра частного определяется значением знаковой цифры первого остатка. Если далее производить деление обычным путем, то, как уже известно из 2-го случая, будут получаться инверсные цифры модуля частного. Следовательно, знаковые цифры остатков надо посылать в регистр частного, минуя БИЦ, так как частное здесь должно быть положительным и его дополнительный код совпадает с прямым.
Таким образом, деление чисел, представленных в дополнительном коде, производится в 3 этапа.
На первом этапе определяется знак частного путем сложения знаковых цифр операндов по модулю 2.
На втором этапе производится нулевой шаг деления для проверки частного на переполнение разрядной сетки путем алгебраического сложения делимого с делителем, которому приписывается знак, противоположный знаку делимого. Псевдознаковая цифра модуля частного определяется как обратное значение знаковой цифры первого остатка, если делимое положительное. Псевдознаковая цифра берется тождественно равной знаку первого остатка, если делимое отрицательное.
На третьем этапе производятся все последующие шагов деления по обычным правилам, но с той лишь разницей, что при отрицательном делителе цифры частного берутся тождественно равными знаковым цифрам соответствующих остатков. В конце деления в
разряд частного обязательно добавляется 1.
Пример. Заданы
I. Определяется знак частного и обращается делитель
II. Проверка на переполнение (нулевой шаг)
Псевдознак модуля частного равен знаку первого остатка, так как делимое отрицательное, т. е. псевдознак частного равен 0.
III. Определяются значащие цифры частного обычным путем.
Производим округление результата и переводим его в дополнительный код:
Пример. Заданы
I. Знак частного Модуль делителя
И. Псевдознаковая цифра частного равна обратной величине знака первого остатка, так как делимое положительное
Псевдознак частного равен 0.
III. Значащие цифры частного определяются знаками остатков, так как делитель отрицателен.
Производим округление частного и перевод его в дополнительный код:
Пример. Заданы
I. Знак частного
Модуль делителя
II. Псевдознак модуля частного равен знаку первого остатка, так как делимое отрицательное
Псевдознак частного равен 0.
Округление частного
Таким образом, алгоритм деления чисел в дополнительных кодах сводится к следующему. На каждом шаге деления производится алгебраическое сложение кода текущего остатка (на нулевом шаге делимого) и кода делителя, которому присваивается знак, противоположный знаку текущего остатка (делимого). При этом, если знаки вновь полученного остатка и делителя одинаковы, то в текущий разряд частного записывается единица, в противном случае — ноль. После этою вновь полученный остаток и частное сдвигаются на один разряд влево. Деление прекращается после вычисления разряда частного, в который прибавляется единица округления. При таком алгоритме деления и условии, что
знак частного получается автоматически, а код модуля частного соответствует его знаку.
Деление чисел с фиксированной запятой в прямом и дополнительном кодах
Деление чисел, заданных в дополнительном коде
Для чисел с фиксированной запятой, заданных в дополнительном коде, алгоритмы деления во многом совпадают с алгоритмами деления для чисел, заданных в прямом коде. Назовем лишь имеющиеся отличия:
Деление со сдвигом и автоматическим восстановлением остатка
Как отмечалось выше, при любом алгоритме деления получение очередного остатка связано со сложение двух чисел разных знаков. Так как при делении чисел, заданных в дополнительном коде, знак результата получается автоматически в процессе деления, то основные формулы (9.1) и (9.2) несколько изменяются по сравнению с делением чисел, заданных в прямом коде:
Если Зн α0 = Зн Xдк, то |X| ≥ |Y|. Следовательно, для чисел с фиксированной запятой Z = ∞, и дальнейшее деление не имеет смысла.
Если Зн α0 ≠ Зн Xдк, то очередные остатки при делении получаем по следующей рекуррентной формуле
( 9.5) |
Очередные разряды мантиссы результата, начиная с z0, вычисляются по формуле
( 9.6) |
Пример 9.5
Выполнить деление двух чисел с фиксированной запятой, заданных в дополнительном коде, по алгоритму деления со сдвигом и автоматическим восстановлением остатка: Xдк = 1.0111; Yдк = 1.0110.
Решение
Результат
Пример 9.6
Выполнить деление двух чисел с фиксированной запятой, заданных в дополнительном коде, по алгоритму деления со сдвигом и автоматическим восстановлением остатка: Xдк = 1.0111; Yдк = 0.0110.
Решение
Деление со сдвигом делителя и автоматическим восстановлением остатка
Данный алгоритм деления сочетает в себе черты алгоритма деления со сдвигом и автоматическим восстановлением остатка для чисел, заданных в дополнительном коде, и алгоритма деления со сдвигом делителя для чисел, заданных в прямом коде.
Первый шаг проводится по формуле
На этом шаге, определяется, превышает ли модуль делимого модуль делителя и если нет, то определяется знак частного z0, на основании следующего выражения:
( 9.10) |
Очередной остаток определяется следующим образом:
( 9.11) |
По соотношению знака очередного остатка и знака [Y]дк определяется очередная цифра частного согласно (9.10).
При построении арифметического устройства, использующего данный алгоритм деления, следует иметь в виду, что если мы не ориентируемся на укороченную разрядную сетку и связанные с этим механизмы коррекции результата после каждого шага вычислений, то из основных регистров необходимо иметь три 2n-разрядных регистров (для хранения делимого, делителя и остатков). Причем в число этих разрядов входит и знаковый разряд. Регистры делимого и делителя при первоначальной загрузке дополняются справа нулями. Кроме функции параллельной загрузки, регистр делителя должен иметь функцию сдвига вправо на один разряд.
Пример 9.7
Выполнить деление двух чисел с фиксированной запятой, заданных в дополнительном коде, по алгоритму деления со сдвигом и автоматическим восстановлением остатка: Xдк = 1.1110; Yдк = 0.0011.
Решение
Результат
Пример 9.8
Выполнить деление двух чисел с фиксированной запятой, заданных в дополнительном коде, по алгоритму деления со сдвигом и автоматическим восстановлением остатка: Xдк = 1.1100; Yдк = 1.1000.
Решение
На некотором шаге деления получили остаток, равный нулю. Стоит ли продолжать деление? При использовании алгоритмов деления чисел, заданных в прямом коде, деление в этом случае прекращалось, и остальные цифры результата записывались равными нулю. Но в этом случае мы получим результат
Курсовая работа: Деление двоичных чисел в прямом, обратном и дополнительном кодах
Название: Деление двоичных чисел в прямом, обратном и дополнительном кодах Раздел: Рефераты по информатике, программированию Тип: курсовая работа Добавлен 04:52:56 30 мая 2009 Похожие работы Просмотров: 5069 Комментариев: 15 Оценило: 4 человек Средний балл: 4.8 Оценка: неизвестно Скачать |