Аналогично представляются числа со знаком и в компьютере. Если мы начнем с нуля:
0000000000000000
и вернемся назад на одно число, то будем иметь
1111111111111111 (16 единиц)
что означает 65535 при изображении чисел без знака и -1 при изображении чисел со знаком. Число 1111111111111110
соответствует 65534 при изображении чисел без знака и -2 при изображении чисел со знаком.
(Традиционно числа -1 и 0 применяются в качестве значений «истина» и «ложь» потому, что в представлении -1 все биты установлены, а в представлении 0 - сброшены.)
Ниже приводится схема, в которой показано, каким образом двоичное число в стеке может использоваться как число без знака или как число со знаком.
Такой странный на первый взгляд способ представления отрицательных чисел дает возможность компьютеру использовать одни и те же процедуры для выполнения как вычитания, так и сложения.
Продемонстрируем изложенное на примере простой задачи: 2 - 1 ---
Эта задача эквивалентна задаче сложения 2+ (-1). При двоичном представлении чисел одинарной длины двойка выглядит следующим образом:
0000000000000010
а отрицательная единица - так:
1111111111111111
Компьютер складывает их таким же образом, как мы это делаем на бумаге. Если сумма в какой-то колонке превышает единицу, то в следующую колонку (старший двоичный разряд) переносится 1. В результате получается: 0000000000000010 + 1111111111111111 ----------------- 1000000000000001
Как видите, компьютеру потребовалось выполнить перенос единицы в старший разряд во всех колонках, а последняя единица была вынесена в 17-й разряд. Но так как элемент стека состоит только из 16 битов, будет выведено число 0000000000000001 т.е. единица, что является правильным ответом.
Мы не объясняем здесь, каким образом компьютер переводит положительное число в отрицательное. При желании вы можете найти описание этого процесса, который называется «дополнением до двух», в литературе.