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



         

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


Тогда вы получите такой результат: 0 1111111111111111 для числа 65535 и 1 0 для числа 65536. Если вы переходите от 65535 к 65536, происходит превышение максимального значения числа одинарной длины (целое число находится на вершине стека), при этом младший бит второго числа в стеке устанавливается в "1". То, что происходит с двумя верхними ячейками стека, аналогично тому, что происходит с двумя байтами в стеке, когда число одинарной длины изменяется с 255 на 256. Другими словами, с числами двойной длины Форт обращается так же, как с числами одинарной длины, но для них используется 32 бита. И при этом можно отображать числа двойной длины как со знаком, так и без знака. (Если это вас смущает, просмотрите материал о хранении чисел в двоичной форме из гл. 3.)

Для чисел двойной длины применяется набор арифметических операций, полностью аналогичный набору для чисел одинарной длины, поэтому мы даже не станем приводить примеры. Если вы не совсем понимаете, что делает тот или иной оператор, посмотрите их определения в приложении А. Вот эти операторы: D+, D-, DMAX, DMIN, DABS и DNEGATE (а в Форт-83 еще и D2/). Имеется также набор операторов для сравнения чисел двойной длины, но они будут рассмотрены в гл. 7. В MMSFORTH и других версиях имеется еще ряд дополнительных арифметических операторов, например D*, D/, D*/, D*/MOD и D/MOD. Они действуют так же, как их эквиваленты для чисел одинарной длины, при этом те слова, которые обеспечивают сохранение промежуточных результатов операций с числами одинарной длины в виде 32-разрядных чисел, в данном случае сохраняют промежуточный результат в виде 64-разрядных чисел (т.е. чисел четырехкратной длины).

В MMSFORTH есть два полезных слова #РТ и HI#. Слово #РТ запоминает положение десятичной точки (считая справа налево) в последнем введенном числе двойной длины. Так, например, 12.345 #PT. выдает число 4, в то время как 1.2345 #РТ. выдает число 5. Вы понимаете, что это слово может пригодиться для масштабирования чисел. Если нет, то из упражнений вам станет ясно, как его использовать.


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