Ваш алгоритм верен для двух чисел дополнения:
-x = ~x + 1
Для дополнения вы бы использовали:
-x = ~x
А для чисел со знаком:
-x = x ^ (1 << n)
Где n
- это смещение бита знака в слове. Я использую здесь обозначение оператора C - ^
- побитовый оператор исключающего или, а <<
- сдвиг влево.
Для другого представления чисел вам понадобится другая операция.