
Сложение в дополнительных кодах
Случай 1. A и B — положительные числа.
В этом случае ничего не поменяется, ибо, как вы помните, у положительного числа прямой, обратный и дополнительный коды совпадают.
Случай 2. А — положительное, а В — отрицательное, по модулю больше А.
В
этом случае мы получим верный результат,
но уже в дополнительном коде. Оно и
логично, складываем-то мы в дополнительном
Случай 3. A — положительное, а B — отрицательное, по модулю меньше A.
В случае с обратными кодами мы прибавляли лишнюю единицу к полученному коду. Здесь же нам придется ее просто отбрасывать. Давайте посмотрим:
−1310 = 1000 11012 (ПК) = 1111 00102 (ОК) = 1111 00112 (ДК)
2310 = 0001 01112 (ПК)
0000 10102 — это уже 1010, а раз мы получили правильный ответ, то нам не нужна лишняя единица. Мы просто отбрасываем ее.
Случай 4. A и B — отрицательные.
Здесь у нас два отрицательных числа, и оба в дополнительном коде, то есть, по логике вещей, результат у нас итак должен получиться в дополнительном коде.. но ведь у нас еще и единица там дополнительная, помните? Давайте взглянем, что же получится:
−1310 = 1000 11012 (ПК) = 1111 00102 (ОК) = 1111 00112 (ДК)
−2310 = 1001 01112 (ПК) = 1110 10002 (ОК) = 1110 10012 (ДК)
Взглянем на число, не учитывая «лишнюю единицу»: 1101 11002 (ДК) = 1101 11012 (ОК) = 1010 00102 (ПК) = −3610. Заметили? И без единицы у нас снова получился правильный ответ, поэтому мы просто отбрасываем единицу, как и в предыдущем примере, и ничего более не делаем.
Пятый и шестой случаи — переполнение — для дополнительного кода аналогичны обратному.
Стоит заметить, что перевод в дополнительный код для компьютера дольше, чем в обратный, ибо там не нужно прибавлять единицу. Однако, как вы смогли заметить, отрицательные складывать легче в дополнительном коде, ибо нет лишнего прибавления единицы.
Итог: Стоит запомнить, что во всех случаях, кроме особого (случай 4, дополнительный код), если у вас получается лишняя единица — вы прибавляете ее к остальной части числа. И не забывайте про то, что если результат у вас получается не того знака, который вы ожидали — это переполнение.
Вычитание
Любое вычитание сводится к сложению двух чисел, поэтому я не буду сейчас здесь разбирать все случаи подробно, а просто напишу про замену вычитания сложением.
Случай 1. A и B — положительные.
A – B = A + (−B)
В итоге получаем сложение мы заменяем на вычитание, остается только проверить, меньше или больше абсолютная величина (модуль) B, чем А, для того, чтобы выбрать правильный способ решения.
Случай 2. А — положительное, B — отрицательное.
Не имеет значения, какое B по модулю, больше или меньше A.
A – (–B) = A + B
Это тот случай, при котором возможно переполнение. Значит, если вы получаете отрицательное число в этом случае — переполнение.
Случай 3. A — отрицательное, B — положительное.
–A – B = –A + (–B)
Получаем сложение двух отрицательных чисел. Это тоже случай, при котором возможно переполнение.
Случай 4. A и B — отрицательные числа.
Получаем ситуацию аналогичную первой:
–A – (–B) = –A + B
Смотрим на модули чисел A и B, и решаем, как именно будем вычислять.