Основным преимуществом представления с двумя дополнениями, которое еще не было упомянуто здесь, является то, что младшие биты суммы, разности или произведения с двумя дополнениями зависят только от соответствующих битов операнды. Причина того, что 8-битное значение со знаком для -1 равно 11111111
, заключается в том, что вычитание любого целого числа, чьи младшие 8 битов равны 00000001
, из любого другого целого числа, младшие 8 битов которого 0000000
, даст целое число чьи младшие 8 битов 11111111
. Математически, значение -1 будет бесконечной строкой из 1, но все значения в диапазоне определенного целочисленного типа будут либо всеми 1, либо всеми 0 после определенной точки, поэтому компьютерам удобно «расширять знак» старший значащий бит числа, как если бы он представлял собой бесконечное число единиц или нулей.
Two's -plement - это почти единственное представление числа со знаком, которое хорошо работает при работе с типами, размер которых превышает натуральный размер слова двоичной машины, поскольку при выполнении сложения или вычитания код может извлекать наименьший фрагмент каждого операнда, вычисляя младший фрагмент результата и сохраните его, затем загрузите следующий фрагмент каждого операнда, вычислите следующий фрагмент результата, сохраните его и т. д. Таким образом, даже процессор, которому требуются все сложения и вычитания для прохождения одного -битный регистр может обрабатывать 32-битные числа со знаком достаточно эффективно (медленнее, чем с 32-битным регистром, конечно, но все еще работоспособно).
При использовании любых других подписанных представлений, разрешенных Стандартом C, каждый бит результата может потенциально зависеть от любого бита операндов, что делает необходимым либо хранить целое значение в регистрах сразу, либо следовать за вычислениями с дополнительным шагом, который, по крайней мере, в некоторых случаях потребует чтения, изменения и перезаписи каждого фрагмента результата.