- •Арифметические операции
- •Операция изменения знака
- •Сложение и вычитание чисел без знака
- •Сложение
- •Вычитание
- •Операция алгебраического умножения
- •Операция алгебраического деления
- •Операция округления действительных чисел
- •Арифметические действия в ддк Сложение в двоично-десятичном коде
- •Вычитание в двоично-десятичном коде
- •Алгебраическое сложение в ддк с использованием дополнительного кода
- •Модифицированные коды
- •Арифметика повышенной точности
Арифметические операции
В настоящем разделе рассмотрим некоторые правила выполнения основных арифметических операций над числами в системах счисления с основанием 2, 8, 10 и 16 представленных в прямом, обратном или дополнительном коде.
Операция изменения знака
Выполнение операции изменения знака числа сводится:
• в прямом коде – к инвертированию знакового разряда кода;
• в обратном коде – к инвертированию знакового разряда и замене цифр всех значащих разрядов кода обратными;
• в дополнительном коде – к инвертированию знакового разряда и к вычислению дополнения значащих разрядов кода до веса знакового разряда.
Правило изменения знака в прямом коде очевидно. Правила изменения знака в обратном и дополнительном кодах следуют из правил преобразования прямого кода в обратный или в дополнительный код и наоборот, но не совпадают с последними. При преобразовании кодов знак сохраняется, а при изменении знака он инвертируется. В остальном правила аналогичны.
Внимание. В дополнительном коде нельзя изменить знак минимального числа (отрицательного максимального по модулю) при сохранении формата. Это следует из асимметрии представления чисел в дополнительных кодах. Если формат расширять нельзя, то изменению знака должна предшествовать проверка кода операнда на значение 1⎢00…0доп с последующим блокированием выполнения операции либо приняты меры для исключения образования этого значения на предшествующих этапах вычислений.
Следующие примеры пар кодов иллюстрируют результаты изменения знака операнда в различных кодах и системах счисления:
0⎢1011 1002п |
0⎢7657 1008д |
0⎢1011 1002о |
0⎢9AF0 3616о |
0⎢3764 4308о |
1⎢1011 1002п |
1⎢0120 7008д |
1⎢0100 0112о |
1⎢650F C916о |
1⎢4013 3478о |
|
|
|
|
|
1⎢F876 AB016д |
0⎢1011 1002д |
1⎢4019 34710о |
0⎢7345 4268п |
1⎢9876 20010д |
0⎢0789 55016д |
1⎢0100 1002д |
0⎢5980 65210о |
1⎢7345 4268п |
0⎢0123 80010д |
Сложение и вычитание чисел без знака
Сложение и вычитание беззнаковых чисел происходит по обычным для
позиционных систем счисления алгоритмам. Примеры (для n =3):
0012 +1002 = 1012 |
1012 – 0102 = 0112 |
Ситуации, когда уменьшаемое меньше вычитаемого или когда результат суммы не умещается в n разрядов, считаются ошибочными и должны отслеживаться устройством компьютера. Реакция на такие ошибки может быть различной в разных типах компьютеров.
Сложение
Операция алгебраического сложения в дополнительном коде
Как было отмечено ранее, алгоритмы выполнения операции алгебраического сложения в прямых кодах относительно сложны. В обратном и дополнительном кодах сложение выполняется проще, поскольку не возникает необходимость в анализе знаков операндов, в сравнении их модулей и т.п.
Сложение в дополнительном коде сводится к сложению одноименных разрядов чисел, начиная с младшего разряда включая знаковый разряд, с учетом переноса из предыдущего разряда. Знаковые разряды складываются по правилам сложения двоичных цифр с учетом переноса из предшествующего разряда. Перенос из знакового разряда отбрасывается. Полученный результат представлен в дополнительном коде.
Рассмотрим примеры сложения чисел в дополнительном коде. При их анализе обратите внимание на то, как складываются знаковые разряды.
Пусть операнды – десятичные числа –231,15 и +215,04. Их сумма равна –016,11.
Дополнительные коды операндов и суммы соответственно равны 1⎜768.85 0⎜215.04 и 1⎜983.89. Выполним сложение операндов в дополнительном коде:
Пусть десятичные операнды равны –231,15 и –215,04. Их сумма равна –446,19.
Дополнительные коды операндов и суммы: 1⎜768.85, 1⎜784.96 и 1⎜553.81. Выполним сложение дополнительных кодов слагаемых:
Примеры сложения двоичных чисел в дополнительном коде:
При сложении одноразрядных двоичных, восьмеричных или шестнадцатеричных чисел следует пользоваться таблицами сложения цифр в этих системах счисления или следующим правилом. Если количественному эквиваленту суммы цифр соответствует цифра из алфавита системы счисления, то перенос в следующий разряд равен нулю, а сумма равна цифре
соответствующей количественному эквиваленту суммы. Если количественный эквивалент суммы цифр больше количественного эквивалента максимальной цифры алфавита, то перенос в следующий разряд равен единице, а цифра суммы имеет количественный эквивалент суммы уменьшенный на основание системы счисления.
Например, в восьмеричной системе счисления 3+2=5 и перенос равен 0. Сумма 4+6=2 и перенос равен 1, так как количественный эквивалент суммы 4+6>7 (4+6=1010), а количественный эквивалент единицы переноса в восьмеричной системе счисления равен 8.
В шестнадцатеричной системе счисления 4+6=А (А имеет количественный эквивалент 1010) и перенос равен 0. Сумма 4+А=Е (Е=1410) и перенос равен 0. Сумма А+А=4 и перенос равен 1 так как вес переноса равен 1610, а А+А=2010.
Примеры сложения шестнадцатеричных чисел в дополнительных кодах.
Операция алгебраического сложения в обратном коде
Сложение в обратном коде выполняется также как и в дополнительном коде, но с той разницей, что перенос из знакового разряда не отбрасывается, а прибавляется к младшему разряду промежуточной суммы. Этот перенос называют циклическим. Результат сложения будет получен в обратном коде.
Примеры сложения двоичных чисел в обратном коде:
Примеры сложения восьмеричных чисел в обратном коде:
Сложение в обратном коде можно начинать с любого, необязательно с младшего разряда, что в некоторых случаях может быть полезно при реализации устройств.
Циклическое распространение переноса при сложении является серьезным недостатком обратного кода по сравнению с дополнительным кодом. Поэтому, несмотря на простоту преобразования прямого кода в обратный код и наоборот, и на простоту изменения знака числа в обратном коде, обратный код сравнительно редко применяют в устройствах вычислительной техники и автоматики.
Переполнение разрядной сетки при сложении
При ограниченной разрядной сетке диапазон представления чисел ограничен. Поэтому сумма двух операндов принадлежащих диапазону может оказаться за его пределами, что приведет к существенной ошибке в вычисленной сумме. Например, пусть в двоичном дополнительном пятиразрядном коде представлены целые положительные операнды со знаком 0⎢0111 (+7) и 0⎢1100 (+12). Сложим их по правилу сложения в дополнительном коде. Величина ошибки недопустимо велика и вызвана выходом правильного значения суммы 0⎢10011 (+19) за пределы диапазона (+15; –16) представления целых со знаком в двоичном дополнительном коде в выбранной пятиразрядной сетке. Такое явление называют переполнением разрядной сетки.
В ЭВМ применяют аппаратуру контроля переполнения разрядной сетки, назначение которой состоит в формировании сигнала R=1 при переполнении. В основу функционирования аппаратуры контроля могут быть положены различные алгоритмы.
Очевидно, что при сложении операндов с разными знаками модуль суммы меньше модуля любого из операндов. Поэтому при разных знаках операндов результат не может выйти за пределы диапазона представления чисел и, следовательно, R=0.
Переполнение разрядной сетки суммы может возникнуть только при одинаковых знаках операндов.
Если операнды положительны и их сумма не укладывается в диапазон представимых чисел, то при их сложении в дополнительном коде образуется перенос из старшего значащего разряда в разряд знака, который приводит к формированию ошибочного отрицательного результата. Поэтому признак переполнения при положительных операндах an⎢an–1…a1a0a–1a–2…am и bn⎢ bn–1…b1b0b–1b–2…bm можно описать двумя вариантами булевого выражения:
где Sn – знаковый разряд суммы; pn – перенос в знаковый разряд.
Если оба операнда отрицательны и сумма выходит за пределы диапазона представляемых чисел, то отсутствие переноса в знаковый разряд приводит к ошибочному положительному результату. Поэтому признаки переполнения при отрицательных операндах – положительный знак результата или отсутствие переноса в знаковый разряд:
Сказанное позволяет определить булевы уравнения, описывающие варианты комбинационных схем вычисляющих признак переполнения разрядной сетки суммы:
Если R=1, то код суммы содержит ошибку.
Существует простой способ ее устранить. Для этого достаточно
• в двоичной системе счисления приписать к ошибочному результату слева знаковый разряд любого из операндов;
• в восьмеричной, десятичной и шестнадцатеричной системах счисления приписать к ошибочному результату слева знаковый разряд любого из операндов и, если знаковый разряд ошибочного результата равен нулю, заменить его на 6, 8 или E соответственно.
Например,