Начальный курс программирования на языке Форт


ЧЕМ ОТЛИЧАЮТСЯ ЧИСЛА СО ЗНАКОМ И БЕЗ ЗНАКА - часть 2


Допустим, что счетчик высвечивает три цифры (трехзначное число). По мере перемотки ленты это число увеличивается. Установим счетчик на нуль и начнем перематывать ленту в обратном направлении. Первое число, которое вы увидите на индикаторе, будет 999. Его мы воспринимаем как - 1. Следующим числом окажется 998, что соответствует -2, и т. д.

Аналогично представляются числа со знаком и в компьютере. Если мы начнем с нуля:

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 т.е. единица, что является правильным ответом.

Мы не объясняем здесь, каким образом компьютер переводит положительное число в отрицательное. При желании вы можете найти описание этого процесса, который называется «дополнением до двух», в литературе.




Начало  Назад  Вперед