Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции - Дискретная математика.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
1.34 Mб
Скачать

Лекция 8 Основы знаковой арифметики

Сложение и вычитание беззнаковых чисел

Во всех позиционных системах счисления данные операции делаются аналогично операциям в десятичной системе счисления. При сложении чисел могут возникать переносы в старшие разряды, а при вычитании – заемы из старших разрядов.

Прямой код

Прямой код (ПК) используется для представления знаковых чисел. При этом старший разряд числа является знаковым (0 – «+», 1 – «-»), а оставшиеся разряды – значащими (модулем числа). Например: +142 = 0.1110, –142 = 1.1110.

ПК наиболее удобен для хранения чисел, поскольку не представляет сложностей для понимания чисел, их печати, сортировки и т.п. Однако выполнения арифметических операций над числами в ПК оказывается достаточно трудоемким.

Рассмотрим выполнение операции сложения чисел в ПК. Алгоритм сложения имеет следующий вид.

В начале проверяется равенство знаков слагаемых. При их равенстве выполняется сложение модулей чисел, и результату присваивается знак одного из операндов. Если при сложении модулей возникает перенос из старшего разряда, то имеет место переполнение, и результат является ошибочным.

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

Таким образом, при сложении чисел в ПК признаком переполнения является наличие переноса из старшего разряда при сложении модулей чисел.

Дополнительный код

Формируется из числа в прямом коде и позволяет выполнять сложение чисел по более простой схеме по сравнению с прямым кодом.

Перевод чисел из ПК в ДК выполняется по следующим правилам:

Положительное число в ДК такое же, как и в ПК.

Если число отрицательное, то для перевода его в ДК нужно знак сохранить, а модуль числа инвертировать и прибавить единицу.

Например.

0.1010ПК = 0.1010ДК = 1010.

1.1011ПК = 1.0101ДК = –1110.

Отметим, что в ПК число 1.0000 означает то же, что и 0.0000. В дополнительном коде число 1.0000 означает число –1610 и является корректным с точки зрения ДК.

Рассмотрим выполнение операции сложения чисел в ДК.

Считая, что оба операнда уже заданы в ДК, выполняется их суммирование, после чего сравниваются переносы из знакового (старшего) и в знаковый разряд. Переполнение результата имеет место при неравенстве переносов. В случае переполнения результат считается неверным.

Преимущества алгоритма сложения чисел в ДК по сравнению с ДК заключаются в следующем.

  1. Знаки операндов участвуют в операции сложения наравне со значащими разрядами. Это приводит к тому, что знак результата формируется автоматически, без дополнительных проверок.

  2. Алгоритм сложения в ПК использует операцию двоичного вычитания, которая крайне сложно реализуется с помощью электронной аппаратуры в связи с использованием заемов. В тоже время операция двоичного сложения реализуется сравнительно просто.

  3. Доступный диапазон чисел в ДК на одно число больше, чем в ПК (при одинаковой разрядности операндов).

Вычитание чисел со знаком

Вычитание сводится к сложению, при этом вычитаемое предварительно умножается на минус единицу: A – B = A + (-B).

Для того, что число в ПК умножить на (-1), достаточно инвертировать знак числа.

Для того, чтобы число в ДК умножить на (-1), нужно инвертировать все разряды числа (включая знаковый), и к полученному значению прибавить единицу.

После этого выполняется сложение чисел согласно ранее рассмотренным алгоритмам.