В чём разница между алгоритмами операций в дополнительных и обратных кодах?

Я помню, что обратный код - это !прямой, а дополнительный - это !прямой + 1 в младший разряд. В чём будет отличие в алгоритмах арифметических операций (сложение, умножение и т.д.), если числа даны в обратном коде или дополнительном коде.
Насколько я помню, различие в операции сложение, когда в обратном при переполнении в младший добавляется 1, а в дополнительном нет, поправьте если нет так.
  • Вопрос задан
  • 30 просмотров
Решения вопроса 1
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Обратный код: !x = 2^n-1 - x.
Дополнительный код - !x+1 = 2^n - x.

В дополнительном коде число -x записывается как 2^n-x. Поэтому его можно просто прибавлять/вычитать/умножать - лишнее 2^n не влезает в разрядность переменной и просто будет проигнорированно.

В обратном коде у вас есть лишнее -1, которое надо компенсировать. прибавлять при вычитании, вычитать при сложении и прибавлять множитель при умножении.

Еще, в обратном коде никак не записать 2^(n-1), потому что число 0 представимо 2 раза в виде 00000000 и 100000000.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы