Применение правил недесятичной арифметики
Цель: научить применять правила недесятичной арифметики для решения практических задач.
Краткие теоретические сведения:
Таблицы арифметических операций над двоичными числами
Сложить двоичные числа 1011+111.
Умножить двоичные числа 11011* 1001.
Контрольные вопросы для самопроверки
1. Что такое «двоичная арифметика»?
2. Перечислите операции над двоичными числами
Практические задания
- 1. Сложение: 10110+1010 = ?
- 1011101 + 1100 = ?
- 2. Умножение:
- 10111 • 1010=?
- 11011 • 101=?
4. Сложение отрицательных чисел в двоичном коде
Цель: научить находить прямой, обратный и дополнительный коды положительных и отрицательных чисел; складывать и вычитать числа в прямом, обратном и дополнительном кодах.
2.3 Двоичная арифметика.
Правила арифметики во всех позиционных системах аналогичны, и в двоичной позиционной системе счисления выполнение арифметических действий над двоичными числами задается с помощью таблиц двоичного сложения, вычитания и умножения. Основной операцией, которая используется в цифровых устройствах при выполнении различных арифметических действий, является операция алгебраического сложения чисел, т. е. сложения, в котором могут участвовать как положительные, так и отрицательные числа. Вычитание легко сводится к сложению путем изменения на обратный знак вычитаемого, а операции умножения и деления также сводятся к алгебраическому сложению и некоторым логическим действиям.
Сложение двух чисел в двоичной системе счисления выполняется на основе таблицы двоичного сложения:
Двузначная сумма в последнем случае означает, что при сложении двух двоичных цифр, равных 1, в каком-либо разряде двоичного числа возникает перенос в соседний старший разряд. Этот перенос должен быть прибавлен к сумме цифр, образовавшейся в соседнем разряде.
При сложении двух многоразрядных двоичных чисел цифры разрядов суммы формируются последовательно, начиная с младшего разряда. Цифра младшего разряда суммы образуется суммированием цифр младших разрядов слагаемых. При этом кроме цифры разряда суммы формируется цифра переноса в следующий, более старший разряд, если оба младших разряда единицы. Таким образом, в разрядах, начиная со второго, могут суммироваться три цифры: цифры соответствующего разряда слагаемых и перенос, поступающий в данный разряд из предыдущего. Пример сложения двух многоразрядных двоичных чисел:
1 1 0 1 1 0 1 — первое слагаемое
1 0 0 1 1 1 1 — второе слагаемое
0 1 0 0 0 1 0 — поразрядная сумма без учета переносов
1 1 1 1 — переносы
10 1 1 1 1 0 0 — окончательная сумма
Непосредственно под двумя слагаемыми записан результат поразрядного сложения без учета переноса. В тех разрядах, в которых оба слагаемых равны единице, поразрядная сумма равна 0. В этих разрядах образовался перенос в соседний старший разряд, который отмечен в следующей строке. В результате сложения строки поразрядных сумм со строкою переносов получается окончательная сумма. При сложении поразрядной суммы с переносами удобно пользоваться следующим правилом: если в результате поразрядного суммирования образовалась группа единиц, расположенных рядом, и в младший разряд этой группы поступает перенос 1, то он переводит все единицы этой группы в нули, а ближайший за рядом единиц 0 — в 1. Это правило можно использовать при сложении следующих чисел:
1 0 1 1 0 1 0 0 1 — первое слагаемое
1 1 0 0 1 1 1 1 1 — второе слагаемое
0 1 1 1 1 0 1 1 0 — поразрядная сумма
1 1 1 — переносы
1 1 0 0 0 0 1 0 0 0 — окончательная сумма
Использование этого правила позволяет ускорить формирование окончательной суммы.
Вычитание двух чисел в двоичной системе выполняется на основе таблицы двоичного вычитания:
Если при поразрядном вычитании приходится вычитать из нуля в уменьшаемом единицу в вычитаемом, то делается заем в соседнем старшем разряде, т. е. единица старшего разряда представляется как две единицы данного разряда. Вычитание в этом случае выполняется в соответствии с таблицей. Если в соседнем разряде или в нескольких старших разрядах стоят нули, то заем делается в ближайшем старшем разряде, в котором стоит единица. Эта единица представляется в виде суммы числа, состоящего из единицы во всех промежуточных разрядах, в которых находились нули, и двух единиц в данном разряде. Далее производится поразрядное вычитание в соответствии с таблицей. Естественно, что необходимости в дополнительном заеме во всех промежуточных разрядах появиться не может. Например, при вычитании чисел
1 1 1 0 0 0 1 1 — уменьшаемое
__1 1 0 1 1 (11) 1 1 — уменьшаемое с учетом заема
1 0 0 1 0 1 1 0 — вычитаемое
0 1 0 0 1 1 0 1 — разность
В цифровой технике операция вычитания с использованием заема практически не применяется (за исключением отдельных устройств) и реализуется как алгебраическое сложение с применением специальных кодов для представления отрицательных чисел. При этом операция вычитания сводится к операции простого арифметического сложения при помощи обратного и дополнительного кодов, используемых для представления отрицательных чисел.
Обратный код отрицательных двоичных чисел может быть сформирован по следующему правилу: цифры всех разрядов, кроме знакового, заменяются на обратные (инвертируются) — единицы заменяются нулями, а нули единицами. В знаковый разряд ставится единица Обратное преобразование из обратного кода в прямой производится по тому же правилу. При использовании обратного кода операция вычитания реализуется как арифметическое сложение положительного числа, представленного в прямом коде, с отрицательным числом, представленным в обратном коде. Например, при вычитании из числа 10110 числа 01101 уменьшаемое представляется как положительное число в прямом коде 0 10110, а вычитаемое— как отрицательное число в обратном коде 1 10010. В представлении чисел знаковые разряды выделены полужирным шрифтом. При выполнении операции арифметического сложения над этими числами получаем алгебраическую сумму
Перенос, возникающий из знакового разряда, при использовании обратного кода должен прибавляться в младший разряд суммы. В данном примере уменьшаемое по модулю больше вычитаемого, поэтому алгебраическая сумма положительная и представлена в прямом коде. При изменении знаков слагаемых в приведенном примере на обратные
1 01001 — первое слагаемое в обратном коде
0 01101 — второе слагаемое в прямом коде
1 10110 — сумма в обратном коде
результатом сложения будет отрицательное число и оно будет представлено в обратном коде.
Дополнительный код отрицательных двоичных чисел может быть сформирован по следующему правилу: цифры всех разрядов, кроме знакового, инвертируются, и в младший разряд прибавляется единица. Дополнительный код может быть получен и из обратного путем прибавления единицы к младшему разряду обратного кода. При этом в знаковый разряд отрицательного числа в дополнительном коде ставится единица. Обратное преобразование из дополнительного кода в прямой производится по тому же правилу.
При использовании дополнительного кода для вычитания двоичных чисел из предыдущего примера получим
0 10110 — первое слагаемое в прямом коде
1 10011 — второе слагаемое в дополнительном коде
0 01001 — сумма в прямом коде
При сложении складываются цифры знаковых разрядов с отбрасыванием возникающего из этого разряда переноса. Алгебраическая сумма, полученная в результате сложения, является положительным числом и поэтому представлена в прямом коде. Если знаки слагаемых меняются на обратные:
1 01010 — первое слагаемое в дополнительном коде
0 01101 — второе слагаемое в прямом коде
1 10111 — сумма в дополнительном коде
то результат сложения есть отрицательное число и оно оказывается представленным в дополнительном коде.
При алгебраическом сложении двоичных чисел в образовавшейся сумме возможно переполнение разрядной сетки, которое заключается в том, что результат операции — сумма содержит большее число разрядов, чем число разрядов в устройстве, предназначенном для их хранения. Для выявления переполнения разрядной сетки используется модифицированный код. В нем два знаковых разряда и в обоих разрядах положительные числа содержат нули, а отрицательные числа — единицы. Выполнение операций суммирования с использованием модифицированного дополнительного или модифицированного обратного кода производится по сформулированным выше правилам. Если результат суммирования содержит в знаковых разрядах комбинации 01 или 10, то это служит признаком переполнения разрядной сетки. Например, при сложении чисел
00 11011 — первое слагаемое в прямом модифицированном коде
11 01011 — второе слагаемое в дополнительном модифицированном коде
00 00110 — сумма в прямом модифицированном коде
Переполнения разрядной сетки не возникает. Перенос из старшего знакового разряда отбрасывается. При сложении чисел 00 10110 и 00 11011
в знаковых разрядах результата суммирования возникает комбинация 01, что свидетельствует о переполнении разрядной сетки и ошибочности зафиксированного результата. Возникновение ошибки связано с тем, что при суммировании положительных чисел перенос из старшего разряда оказался зафиксированным во втором из знаковых разрядов. Для регистрации результата суммирования в данном примере требуется шесть разрядов (кроме знаковых). При суммировании отрицательных чисел также возможно переполнение разрядной сетки;
В этом случае комбинация 10 в знаковых разрядах указывает на переполнение разрядной сетки.
Умножение двоичных многоразрядных чисел включает в себя операции — определение знака произведения и определение его абсолютной величины. Знаковый разряд может быть получен суммированием цифр знаковых разрядов сомножителей без формирования переноса:
1 + 1 = 0 без формирования переноса
При несовпадении цифр получается 1, что соответствует знаку произведения двух сомножителей с разными знаками.
Абсолютная величина значения произведения определяется путем перемножения чисел без учета их знаков. Перемножение многоразрядных двоичных чисел производится на основе таблицы двоичного умножения
При умножении двух двоичных чисел множимое последовательно умножается на каждую цифру множителя, начиная либо с младшей, либо со старшей, и для учета веса соответствующей цифры множителя сдвигается либо влево, если умножение производится, начиная с младшего разряда множителя, либо вправо, если умножение производится, начиная со старшего разряда множителя, на такое число разрядов, на которое соответствующий разряд множителя сдвинут относительно младшего или старшего разряда.
Получающиеся в результате умножения и сдвига частичные произведения после суммирования дают полное произведение. Особенность умножения двоичных чисел состоит в том, что частичное произведение может быть либо сдвинутым на соответствующее число разрядов множимым, если соответствующая цифра множителя равна 1, либо нулем, если соответствующая цифра множителя равна 0:
10111 — первое частичное произведение
00000 — второе частичное произведение
10111 — третье частичное произведение
10111_____— четвертое частичное произведение
Тот же результат можно получить при умножении, начиная со старших разрядов множителя:
В цифровых устройствах процессу суммирования частичных произведений придают последовательный характер: формируется одно из частичных произведений, к нему с соответствующим сдвигом прибавляется следующее частичное произведение, к полученной сумме прибавляется с соответствующим сдвигом очередное частичное произведение, и т. д., пока не окажутся просуммированными все частичные произведения и не будет получено полное произведение.
Пример умножения чисел этим методом:
10111 — четвертое частичное произведение
101110 — сдвиг на разряд влево
_10111 — третье частичное произведение
1000101 —прибавление третьего частичного произведения
10001010 — сдвиг на разряд влево
00000 — второе частичное произведение
10001010 — прибавление второго частичного произведения
100010100 — сдвиг на разряд влево
10111 — первое частичное произведение
100101011 — прибавление первого частичного произведения
При таком методе все частичные произведения суммируются с требуемыми сдвигами друг относительно друга, благодаря чему образуется ранее приведенный результат умножения этих чисел.
При умножении дробных чисел меньше единицы умножение удобнее начинать с младшего разряда множителя. Так, при перемножении дробных чисел 0,10111 и 0,1101 получим
0,10111: — первое частичное произведение
0,01011: 1 — сдвиг на разряд вправо
00000: — второе частичное произведение
0,01011: — прибавление второго частичного произведения
0,00101: 11 — сдвиг на разряд вправо
10111: — третье частичное произведение
0,11100: 11 — прибавление третьего частичного произведения:
0,01110: 011 — сдвиг на разряд вправо
10111: — четвертое частичное произведение
1,00101: 011 — прибавление четвертого частичного произведения
0,10010: 1011— сдвиг на разряд вправо
Если требуется сохранить все разряды в произведении, то в разрядной сетке устройства должно быть предусмотрено число разрядов, равное сумме числа разрядов множимого и множителя. Однако при умножении дробных чисел часто в произведении требуется иметь то же число разрядов, что и в множимом. В таком приближенном представлении результата не фиксируются цифры разрядов при сдвигах, выдвигаемые правее вертикальной штриховой линии, показанной в приведенном выше примере. Таким образом, цифры младших разрядов окажутся потерянными и будет получен приближенный результат 0,100101. Далее отбрасывается последний из разрядов, и если этот разряд содержит 1, то 1 прибавляется к следующему разряду для округления результата. Следовательно, полученный результат 0,10011.
Если множимое, или множитель, или оба вместе содержат и целую и дробную части, то запятые в множимом и множителе не учитываются, они умножаются как два целых числа и от полученного произведения справа отделяются запятой т+п разрядов, где п — число дробных разрядов множимого, a m — число дробных разрядов множителя.
Деление двоичных многоразрядных чисел включает в себя две операции — определение знака частного и определение его абсолютной величины.
Знаковый разряд частного может быть получен, как и знаковый разряд произведения, суммированием цифр знаковых разрядов делимого и делителя без формирования переноса. Абсолютная величина частного определяется делением чисел без учета их знаков.
Деление начинается с того, что от делимого слева отделяется группа разрядов, причем количество разрядов в этой группе должно либо равняться количеству разрядов в делителе, либо быть на один разряд больше. Если отделение такой группы возможно, в старший разряд частного записывается 1, в противном случае в разряд единиц частного записывается нуль. Если выявилось, что частное содержит целую часть, то образуется новая группа разрядов путем вычитания из выделенной группы делителя и приписывания к разности очередной цифры делимого. Если в результате получилось число, превышающее делитель, то в частное записывается 1, в противном случае следующая цифра будет равна 0.
В дальнейшем выполняется ряд одинаковых циклов. Если последняя цифра частного была равна 1, то новая группа образуется вычитанием делителя из предыдущей группы и приписыванием очередной цифры делимого. Если последняя цифра частного 0, то для образования новой группы достаточно приписать к предыдущей группе очередную цифру делимого. Последняя цифра целой части частного получается тогда, когда после определения очередной цифры частного 1 или 0 в делимом не останется больше цифр для того, чтобы приписывать их к разности между предыдущей группой и делителем или к самой предыдущей группе. После этого начинается выделение дробных членов частного. Оно отличается от вычисления целых членов только тем, что вместо очередных цифр делимого к предыдущим группам приписываются нули.
Рассмотрим примеры, в которых делимое больше и меньше делителя:

В цифровых устройствах при выполнении операции деления так же, как и при выполнении операции алгебраического сложения, используется дополнительный и модифицированный коды. Например, при делении числа 0,11011 на 0,11101 представляем делитель в дополнительном коде 00011:

При вычитании сдвинутые делители представляются в дополнительном коде.
Для ускорения деления используется деление без восстановления остатка. При этом способе допускаются как положительные, так и отрицательные остатки при вычитании делителя. Если очередной остаток положителен, то в частное пишется 1, а на следующем цикле работы делитель вычитается из сдвинутого на один разряд влево остатка. Если же очередной остаток отрицателен, то в частное пишется 0, а на следующем цикле работы делитель прибавляется к сдвинутому на один разряд влево остатку.
Например, при делении числа N1= 10011 на число N2=0,11001 по способу без восстановления остатка при переходе к модифицированным дополнительным кодам получим N1 = 00 10011, N2=00 11001,
—N2=11 100111:

Как видно из приведенных примеров, деление является весьма трудоемкой операцией. В ряде случаев в цифровых устройствах эта операция заменяется нахождением обратной величины делителя по специальной подпрограмме и последующим умножением делимого на найденную обратную величину делителя, которая вычисляется приближенно на основе какой-либо быстро сходящейся итерационной формулы.
Двоичное число: прямой, обратный и дополнительный коды
Прямой, обратный и дополнительный коды двоичного числа — способы представления двоичных чисел с фиксированной запятой в компьютерной (микроконтроллерной) арифметике, предназначенные для записи отрицательных и неотрицательных чисел

Мы знаем, что десятичное число можно представить в двоичном виде. К примеру, десятичное число 100 в двоичном виде будет равно 1100100, или в восьмибитном представлении 0110 0100. А как представить отрицательное десятичное число в двоичном виде и произвести с ним арифметические операции? Для этого и предназначены разные способы представления чисел в двоичном коде.
Сразу отмечу, что положительные числа в двоичном коде вне зависимости от способа представления (прямой, обратный или дополнительный коды) имеют одинаковый вид.
Прямой код
Прямой код — способ представления двоичных чисел с фиксированной запятой. Главным образом используется для записи неотрицательных чисел
Прямой код используется в двух вариантах.
В первом (основной) — для записи только неотрицательных чисел:

В этом варианте (для восьмибитного двоичного числа) мы можем записать максимальное число 255 (всего чисел 256 — от 0 до 255)
Второй вариант — для записи как положительных, так и отрицательных чисел.
В этом случае старший бит (в нашем случае — восьмой) объявляется знаковым разрядом (знаковым битом).
При этом, если:
— знаковый разряд равен 0, то число положительное
— знаковый разряд равен 1, то число отрицательное

В этом случае диапазон десятичных чисел, которые можно записать в прямом коде составляет от — 127 до +127:

Подводя итоги вопроса, не влезая в его дебри, скажу одно:
Прямой код используется главным образом для представления неотрицательных чисел.
Использование прямого кода для представления отрицательных чисел является неэффективным — очень сложно реализовать арифметические операции и, кроме того, в прямом коде два представления нуля — положительный ноль и отрицательный ноль (чего не бывает):
Обратный код
Обратный код — метод вычислительной математики, позволяющий вычесть одно число из другого, используя только операцию сложения.
Обратный двоичный код положительного числа состоит из одноразрядного кода знака (битового знака) — двоичной цифры 0, за которым следует значение числа.
Обратный двоичный код отрицательного числа состоит из одноразрядного кода знака (битового знака) — двоичной цифры 1, за которым следует инвертированное значение положительного числа.
Для неотрицательных чисел обратный код двоичного числа имеет тот же вид, что и запись неотрицательного числа в прямом коде.
Для отрицательных чисел обратный код получается из неотрицательного числа в прямом коде, путем инвертирования всех битов (1 меняем на 0, а 0 меняем на 1).
Для преобразования отрицательного числа записанное в обратном коде в положительное достаточного его проинвертировать.
При 8-битном двоичном числе — знаковый бит (как и в прямом коде) старший (8-й)

Диапазон десятичных чисел, который можно записать в обратном коде от -127 до + 127
Арифметические операции с отрицательными числами в обратном коде:
1-й пример (для положительного результата)
Дано два числа:
100 = 0110 0100
-25 = — 0001 1001
Необходимо их сложить:
100 + (-25) = 100 — 25 = 75
1-й этап
Переводим число -25 в двоичное число в обратном коде:
25 = 0 001 1001
-25= 1 110 0110
и складываем два числа:
0 110 0100 (100) + 1 110 0110 (-25) = 1 0 100 1010, отбрасываем старшую 1 (у нас получился лишний 9-й разряд — переполнение), = 0 100 1010
2-й этап
Отброшенную в результате старшую единицу прибавляем к результату:
0 100 1010 + 1 = 0 100 1011 (знаковый бит = 0 , значит число положительное), что равно 75 в десятичной системе
2-й пример (для отрицательного результата)
Дано два числа:
5 = 0000 0101
-10 = — 0000 1010
Необходимо их сложить:
5 + (-10) = 5 — 10 = -5
1-й этап
Переводим число -10 в двоичное число в обратном коде:
10 = 0 000 1010
-10= 1 111 0101
и складываем два числа:
0 000 0101 (5) + 1 111 0101 (-10) = 1 111 1010 (знаковый бит = 1 , значит число отрицательное)
2-й этап
Раз результат получился отрицательный, значит число представлено в обратном коде.
Переводим результат в прямой код (путем инвертирования значения, знаковый бит не трогаем):
1 111 1010 —-> 1 000 0101
Проверяем:
1 000 0101 = — 0000 0101 = -5
Обратный код решает проблему сложения и вычитания чисел с различными знаками, но и имеет свои недостатки:
— арифметические операции проводятся в два этапа
— как и в прямом коде два представления нуля — положительный и отрицательный
Дополнительный код
Дополнительный код — наиболее распространенный способ представления отрицательных чисел. Он позволяет заменить операцию вычитания на операцию сложения и сделать операции сложения и вычитания одинаковыми для знаковых и беззнаковых чисел.
В дополнительном коде (как и в прямом и обратном) старший разряд отводится для представления знака числа (знаковый бит).
Диапазон десятичных чисел которые можно записать в дополнительном коде от -128 до +127. Запись положительных двоичных чисел в дополнительном коде та-же, что и в прямом и обратном кодах.

Дополнительный код отрицательного числа можно получить двумя способами
1-й способ:
— инвертируем значение отрицательного числа, записанного в прямом коде (знаковый бит не трогаем)
— к полученной инверсии прибавляем 1
Пример:
Дано десятичное число -10
Переводим в прямой код:
10 = 0 000 1010 —-> -10 = 1 000 1010
Инвертируем значение (получаем обратный код):
1 000 1010 —-> 1 111 0101
К полученной инверсии прибавляем 1:
1 111 0101 + 1 = 1 111 0110 — десятичное число -10 в дополнительном коде
2-й способ:
Вычитание числа из нуля
Дано десятичное число 10, необходимо получить отрицательное число (-10) в дополнительном двоичном коде
Переводим 10 в двоичное число:
10 = 0 000 1010
Вычитаем из нуля:
0 — 0000 1010 = 1 111 0110 — десятичное число -10 в дополнительном коде

Арифметические операции с отрицательными числами в дополнительном коде
Дано: необходимо сложить два числа -10 и 5
-10 + 5 = -5
Решение:
5 = 0000 0101
-10 = 1111 0110 (в дополнительном коде)
Складываем:
1111 0110 + 0000 0101 = 1111 1011, что соответствует числу -5 в дополнительном коде
Как мы видим на этом примере — дополнительный код отрицательного двоичного числа наиболее подходит для выполнения арифметических операций сложения и вычитания отрицательных чисел.
Вывод:
1. Для арифметических операций сложения и вычитания положительных двоичных чисел наиболее подходит применение прямого кода
2. Для арифметических операций сложения и вычитания отрицательных двоичных чисел наиболее подходит применение дополнительного кода
Прямой, обратный и дополнительный коды
Очень часто в вычислениях должны использоваться не только положительные, но и отрицательные числа.
Число со знаком в вычислительной технике представляется путем представления старшего разряда числа в качестве знакового . Принято считать, что 0 в знаковом разряде означает знак «плюс» для данного числа, а 1 – знак «минус».
Выполнение арифметических операций над числами с разными знаками представляется для аппаратной части довольно сложной процедурой. В этом случае нужно определить большее по модулю число, произвести вычитание и присвоить разности знак большего по модулю числа.
Применение дополнительного кода позволяет выполнить операцию алгебраического суммирования и вычитания на обычном сумматоре. При этом не требуется определения модуля и знака числа.
Прямой код представляет собой одинаковое представление значимой части числа для положительных и отрицательных чисел и отличается только знаковым битом. В прямом коде число 0 имеет два представления «+0» и «–0».
Обратный код для положительных чисел имеет тот же вид, что и прямой код, а для отрицательных чисел образуется из прямого кода положительного числа путем инвертирования всех значащих разрядов прямого кода. В обратном коде число 0 также имеет два представления «+0» и «–0».
Дополнительный код для положительных чисел имеет тот же вид, что и прямой код, а для отрицательных чисел образуется путем прибавления 1 к обратному коду. Добавление 1 к обратному коду числа 0 дает единое представление числа 0 в дополнительном коде. Однако это приводит к асимметрии диапазонов представления чисел относительно нуля. Так, в восьмиразрядном представлении диапазон изменения чисел с учетом знака.
-128 <= x <= 127.
Таблица прямого, обратного и дополнительного кода 4-битных чисел.
| Число | Прямой код | Обратный код | Дополнительный код |
| -8 | — | — | 1000 |
| -7 | 1111 | 1000 | 1001 |
| -6 | 1110 | 1001 | 1010 |
| -5 | 1101 | 1010 | 1011 |
| -4 | 1100 | 1011 | 1100 |
| -3 | 1011 | 1100 | 1101 |
| -2 | 1010 | 1101 | 1110 |
| -1 | 1001 | 1110 | 1111 |
| 00 | 10000000 | 11110000 | 0000 |
| 1 | 0001 | 0001 | 0001 |
| 2 | 0010 | 0010 | 0010 |
| 3 | 0011 | 0011 | 0011 |
| 4 | 0100 | 0100 | 0100 |
| 5 | 0101 | 0101 | 0101 |
| 6 | 0110 | 0110 | 0110 |
| 7 | 0111 | 0111 | 0111 |
Сложение и вычитание чисел со знаком в дополнительном коде
Если оба числа имеют n–разрядное представление, то алгебраическая сумма будет получена по правилам двоичного сложения (включая знаковый разряд), если отбросить возможный перенос из старшего разряда. Если числа принадлежат диапазону представимых данных и имеют разные знаки, то сумма всегда будет лежать в этом диапазоне. Переполнение может иметь место, если оба cлагаемых имеют одинаковые знаки.
Пример 1: 6 – 4 = ?
6 – положительное число с кодом 0110
–4 – отрицательное число с дополнительным кодом 1100
(перенос игнорируется): 6 – 4 = 2.
Пример 2: –5 + 2 = ?
2 – положительное число с кодом 0010
–5 – отрицательное число с дополнительным кодом 1011
Число с кодом 1101 является отрицательным, модуль этого числа имеет код 00112 = 310.