Дополнение к номеру - PullRequest
       3

Дополнение к номеру

2 голосов
/ 10 января 2011

предположим, у меня есть переменная

int a = 512

Теперь, когда я применяю ~ a, что означает, что кто-то дополняет в c. Как я получаю -513 в качестве выхода.

int - это минимум 16 бит, а двоичный эквивалент 512 равен

0000 0010 0000 0000 И теперь, когда вы делаете его дополнение, оно становится

1111 1101 1111 1111. Теперь кто-нибудь может мне сказать, почему вывод -513.

Могу ли я теперь надеяться, что ребята на этом форуме поняли мой вопрос.

1 Ответ

11 голосов
/ 10 января 2011

Отрицательные числа часто представлены в виде дополнения до двух , поэтому оно интерпретируется так, как оно есть.

Предполагая, что int является 16-битным, у вас будет битовый шаблон 1111 1101 1111 1111. Так как самый верхний бит установлен, число является отрицательным. Чтобы преобразовать в десятичное число, согласно правилам для дополнения до двух, число сначала побитово инвертируется. Это возвращает ваши 512. Затем добавляется один, который дает 513. И так как число было отрицательным, мы получаем -513.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...