Вот формула, с которой вы, вероятно, уже знакомы: N' = 2^n - N
.
Где n - количество битов, N ' - десятичное представление дополнения -N , а N
- кардинальное число.
Например, short int x = -6
будет N' = 2^8 - 6 = 250
при преобразовании в unsigned short int
.
Теперь с помощью этой формулы вы можете получить n = log(N+N')
(журнал базы 2).
Edit:
Я был более сосредоточен только на количестве бит. Теперь я перечитал ваш вопрос ...
Позвольте мне дать вам ответ:
Вам нужно как минимум два бита для представления 3, и вам нужен один дополнительный бит для представления signness , что означает, что вам нужно как минимум 3 бита для представления -3. То же самое касается 1. Имея это в виду, [011] = 3, возьмите дополнение одного (инвертирующие биты) => [100] и добавьте 1 => [101] = -3.
Что касается -1, вы делаете то же самое. [01] = 1, инвертировать биты => [10] => добавить единицу => [11] = -1.
Вот и все, я думаю ...