Рассмотрим арифметические операции в двоичном коде

Если вы введете в программе «Калькулятор» Microsoft Windows десятичное отрицательное число и переключитесь в двоичную систему, то это число будет отображено в дополнительном коде. С арифметическими операциями над отрицательными числами, представленными в дополнительном коде, связаны две проблемы. Первая из этих проблем — переполнение (overflow). Она заключается в том, что при сложении двух положительных или двух отрицательных чисел может возникнуть переполнение в знаковом бите, например:
а) Сумма двух положительных чисел
б) Сумма двух отрицательных чисел
Переполнение может возникнуть только в том случае, если оба операнда имеют одинаковые знаковые биты. Поэтому для обнаружения переполнения следует отслеживать значение знакового бита результата, отличающееся от значения знаковых битов операндов.
Вторая проблема касается выполнения арифметических операций над знаковыми операндами разной разрядности, например:
а) Расширение положительного числа
б) Расширение отрицательного числа
Если первый операнд положителен, его разрядность можно увеличить до 16 бит, заполнив свободные позиции нулями. Если же требуется расширить отрицательное число, то решение уже не так очевидно. В этом случае расширение числа производится путем заполнения пустых разрядов единицами. Общее правило звучит так: при расширении данных дополнительные разряды слева следует заполнять знаковым битом. Этот метод называется расширением знака (sign extension).
Умножение числа на п-ю степень двойки реализуется сдвигом исходного значения на п позиций влево. Таким образом, последовательность операций эквивалентна умножению числа 6 на 22; оператор используется для обозначения сдвига влево. Это же правило применимо и к отрицательным числам.
Смена значения знакового бита означает переполнение в старшем бите модуля числа. Некоторые компьютеры (микропроцессоры) поддерживают операцию арифметического сдвига влево, которая сигнализирует о такой ситуации в отличие от обычной операции логического сдвига влево, используемой для сдвига беззнаковых чисел.
Умножение на число, не являющееся степенью двойки, можно реализовать, комбинируя операции сдвига и суммирования. Аналогичным образом деление числа на п-ю степень двойки реализуется сдвигом значения на п позиций вправо. Этот же способ применим к знаковым числам.