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



         

Глава 4. Еще об арифметических операциях - часть 24


Если при загрузке Форта это не производится, то нужно осуществить загрузку, после этого мы попробуем сделать несколько примеров. Для того чтобы их понять, вам нужно знать, что слово D. (произносится как дэ-точка) печатает число двойной длины, оно является эквивалентом слова, (точка). Попробуем ввести 1.23 D. и мы увидим на экране число 123. А теперь введите 123. D. и вы увидите тот же самый результат: 123 Ok Теперь введите 1234567890. D. и будет выведено 1234567690 ok

Но если ввести 1234567890 (без десятичной точки в конце),то произойдет переполнение, потому что число было чересчур велико. Не слишком ли это смущает вас? Для чего в числе была нужна точка? И почему число 1234567890. проходит, а число 1234567890 - нет? Ответ простой. Десятичная точка сообщает Форту, что число нужно рассматривать как число двойной длины, т. е- оно должно быть записано в 32 разряда, или 4 байта. При этом совершенно безразлично, где находится десятичная точка, поскольку она в дальнейшем не используется (вы помните, что числа двойной длины используются в целочисленной арифметике). (Примечание: десятичная точка игнорируется не всегда. В MMSFORTH и других версиях Положение десятичной точки запоминается для того, чтобы произвести масштабирование чисел, как мы вскоре увидим.) И поэтому если десятичная точка отсутствует, то она и не обнаруживается при печати числа. Теперь вам стало понятно, что происходит в наших примерах. Очевидно, что число 1234567890 приводит к ошибке, так как вы не сообщили Форту, что это число двойной длины, а для числа одинарной длины оно слишком велико.

Попробуем еще несколько примеров. Убедитесь, что стек пуст и после этого введите 1.23 . . Вы увидите 0 123 ok В этом случае вы вывели два числа одинарной длины, на вершине стека было число 0 и следующее число-123. Попробуйте ввести 65535. U. U. тогда вы получите 0 65535 ok но если ввести 65536. U. U. то вы увидите 1 0 ok

Вы понимаете, в чем тут дело? Если нет, то пропечатайте результаты последних двух примеров в двоичной форме (2 BASE !).


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