Представьте себе машину, которая использует бесконечное число битов для целых чисел. Предположим, что один вычитается из числа, все крайние правые биты которого равны нулю, а следующий бит равен «1». Все крайние правые нули 'k' станут единицами, а следующий бит станет нулем.
Теперь предположим, что для некоторого «k» самые правые биты «k» равны нулю, а следующий бит неизвестен, но где-то известно, что где-то есть «1». В этом сценарии, даже не зная старших бит, все равно известно, что младшие биты k должны перейти от нуля до 1.
Арифметика дополнения к двум основана на предпосылке, что вычитание одного из чего-либо должно преобразовать все конечные нули в «1», без особого случая, когда число равно нулю. Если двоичное число содержит бесконечное число конечных нулей, вычитание одного должно дать бесконечное число единиц.
Кстати, обратите внимание, что здесь работает общая формула для геометрического ряда: сумма = 0..inf равна 1 / (1-а). Обычно используется со значениями «а», такими как 1/2 (например, сумма 1 + 1/2 + 1/4 + 1/8 и т. Д. Равна 2), он «работает» для значения 2 (получая итоговое значение, равное -1 ).
Конечно, компьютеры не могут хранить бесконечное число единиц. Поэтому существует соглашение, согласно которому старший бит в сохраненном представлении числа фактически представляет состояние всех битов за пределами.