Язык программирования Форт



   Купить сетка овощная.        

Положительные, отрицательные числа и числа без знака


Для представления чисел одинарной длины в Форте используются два байта, т.е. 16 битов памяти. Поэтому возможно представить числа от 0 до 65535 (2^16=65536), не так ли ? Но, разумеется, если нам не нужны отрицательные числа.

Попробуйте ввести с клавиатуры

65535 .

Результат получится такой:

-1 ok

Что произошло ? Очевидно, то, что Форт воспринимает число 65535 как отрицательное число. Теперь попробуйте

65534 .

и получите

-2 Ok

Это кажется еще более странным. А теперь введите

32768 .

Форт выдаст

-32768 ok

В то же время, если ввести

32767 .

мы получим

32767 ok

Ужасная путаница, неправда ли ? В действительности же форт работает с так называемыми числами со знаком и числами без знака. Все, что находится в диапазоне 32768 - 65535, Форт рассматривает как отрицательные числа, если вы не указываете, что они положительные. Попробуйте ввести

65535 U.

Результат

65535 ok

получится таким, каким он и должен быть. Если вы испытаете слово U. с другими числами, включая те, которые больше 32767, вы будете получать те же числа, что и ввели. Слово U. предназначено для печати чисел, не принимая во внимание знак числа, т.е. "чисел без знака". Имеются также другие операторы для выполнения арифметических действий с числами без знака, и мы будем работать с ними в гл. 4. Ну а теперь попробуйте ввести

-1 U.

в результате получится число 65535. Становится все хуже и хуже. А вот что происходит на самом деле. Если вы вводите 65535 или -1, Форт кладет в стек одно и то же число:

1111111111111111

В нем все 16 разрядов установлены в "1".

Числа 65534 и -2 вводятся в стек в виде

1111111111111110

и 65533 и -3 - как

1111111111111101

Поэтому, если числа больше 32767, Форт может рассматривать их и как отрицательные и как числа без знака, в зависимости от ваших указаний. Числа 0 - 32767 (от 0 до 11111111111111, с 15 единицами) воспринимаются как положительные. Если число со знаком, т.е. если его 16-й разряд равен 1, тогда число считается отрицательным, но это не совсем так, потому что оказывается, что числа "больше" 32767 (как числа без знака) менее "отрицательные".


Содержание  Назад  Вперед