Отрицательные числа в дополнительном коде

В этой статье попробую вкратце изложить идею понимания дополнительного кода в компьютере как понимаю её я. Что же, приступим.

Идея дополнительного кода — не усложнять аппаратную реализацию операций сложения и вычитания. При дополнительном коде используется та же реализация операций сложения и вычитания что и для целых беззнаковых чисел.

Чтобы дополнительный код работал, используется трюк с переполнением значения регистра. Допустим, у нас есть 8-битный регистр. Если в нём содержится 111111112, то при прибавлении 12 происходит переполнение и в регистре оказывается 000000002. Это похоже на то, как если бы мы сложили -1 и 1 и получили 0.

Предположим, что 111111112 это и есть представление -110 в нашем «магическом» дополнительном коде. Возникает вопрос — как преобразовывать положительные целые числа в отрицательные в дополнительном коде?

Итак, необходимо получить 111111112 исходя из 000000012. Инвертируем биты — получаем 111111102. Остаётся добавить к этому числу 12, чтобы получить требуемое. Добавляем бит. Не это ли искомый алгоритм? Проверяем для других чисел и убеждаемся что всё работает правильно.

Строгое доказательство, наверняка, есть в умных книгах, мне же этого пока достаточно.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *