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