Для представления чисел одинарной длины в Форте используются два байта, т.е. 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 (как числа без знака) менее "отрицательные".