При выполнении арифметических операций над двоичными числами необходимо учитывать знак числа. С этой целью вводится дополнительный знаковый разряд z, который обычно располагается перед числовыми разрядами. Для положительных чисел значение знакового разряда z = 0, для отрицательных чисел z = 1.
Как и в десятичной системе счисления, операция сложения двух положительных n-разрядных чисел и выполняется поразрядно, начиная с младшего. Разрядные числа и суммируются по модулю 2 с учетом переноса из предыдущего (младшего) разряда в соответствии с таблицей 10.1. Сумма , если количество слагаемых со значением 1 нечетное, а перенос в последующий разряд = 1, если количество таких слагаемых не меньше двух.
Операцию вычитания в цифровой технике реализуют с помощью сложения. Для этого вычитаемое, включая его знаковый разряд, представляют в обратном коде. Если в результате суммирования в знаковом разряде образуется перенос, то эта единица прибавляется к младшему разряду суммы. Такое прибавление единицы называют циклическим переносом. Знак результата определяется получившимся значением знакового разряда .
В общем случае для выполнения операций сложения и вычитания удобно представлять отрицательные числа в обратном коде, а положительные – в прямом. Вычитание заменяется сложением с переводом вычитаемого в обратный код, если это число положительное, и в прямой код, если число отрицательное. Если результат операции получается отрицательный ( = 1), то он представлен в обратном коде, если положительным ( = 0) – в прямом коде.
Пример 10.3.
Недостатком использования обратного кода является образование циклического переноса, который приводит к повторению операции сложения, что значительно увеличивает время выполнения действий.
При использовании дополнительного кода действия сложения и вычитания выполняются так же, как с использованием обратного кода, но проще и быстрее, так как отпадает необходимость в циклическом переносе из знакового разряда. Однако преобразование числа в дополнительный код технически реализуется сложнее, чем в обратный.
Умножение двоичных многоразрядных чисел в принципе не отличается от умножения десятичных чисел. Так как частное произведение многоразрядного числа на 1 равно этому числу, а умножение на 0 дает нули во всех разрядах, действие умножения сводится, таким образом, к операциям сдвига и сложения частных произведений. Очевидно, что при этом можно опустить промежуточный результат умножения на нуль и просто сдвинуть влево следующее промежуточное произведение (пример 10.4).
Двоичное деление тоже аналогично десятичному, но благодаря меньшему числу цифр в системе счисления операция получается более простой. Это видно из примера 10.5 (деление 1011012 = 4510 на 10012 = 910).
Деление сводится к операциям сдвига и вычитания.
Рассмотренные выше арифметические операции относятся к операциям над двоичными числами, представленными в форме с фиксированной запятой, когда число отображается в виде единого целого, каждый разряд его имеет неизменный вес. На практике, с целью расширения диапазона чисел, используют форму с плавающей запятой. Здесь число состоит из двух частей: мантиссы т, содержащей значение цифры числа, и порядка р, показывающего степень, в которую надо возвести основание счисления q, чтобы полученное при этом число, умноженное на мантиссу, давало истинное значение представляемого числа:
(10.3)
Арифметические действия над числами с плавающей запятой реализуются несколько сложнее, чем над числами с фиксированной запятой, так как здесь необходимо выполнять операции как над мантиссами, так и над порядком.