Spec-Zone.ru › GNU Fortran 8

6.1.9 Литералы BOZ

Помимо десятичных констант, Fortran также поддерживает двоичные (b), восьмеричные (o) и шестнадцатеричные (z) целочисленные константы. Синтаксис: ‘префикс цитата цифры цитата’, где префикс — это либо b, либо o, либо z, цитата — это либо ' или ", а цифры для двоичных 0 или 1, для восьмеричных между 0 и 7, а для шестнадцатеричных между 0 и F. (Пример: b'01011101'.)

До Fortran 95, литералы BOZ разрешалось использовать только для инициализации целочисленных переменных в операторах DATA. Начиная с Fortran 2003, литералы BOZ также разрешены в качестве аргументов REAL, DBLE, INT и CMPLX; результат совпадает с тем, как если бы целочисленный литерал BOZ был преобразован с помощью TRANSFER соответственно к real, double precision, integer или complex. В качестве расширения GNU Fortran, встроенные процедуры FLOAT, DFLOAT, COMPLEX и DCMPLX обрабатываются аналогично.

В качестве расширения GNU Fortran разрешает задавать шестнадцатеричные литералы BOZ с префиксом X, помимо стандартного префикса Z. Литерал BOZ также можно задать, добавив суффикс к строке, например, Z'ABC' и 'ABC'Z эквивалентны.

Кроме того, GNU Fortran позволяет использовать литералы BOZ вне операторов DATA и четырёх встроенных функций, разрешённых Fortran 2003. В операторах DATA, в прямых присваиваниях, где правая часть содержит только литерал BOZ, и для инициализаторов старого стиля вида integer i /o'0173'/, константа передаётся так, как если бы использовался TRANSFER; для чисел COMPLEX инициализируется только вещественная часть, если не используется CMPLX. Во всех остальных случаях литерал BOZ преобразуется в значение типа INTEGER с наибольшим десятичным представлением. Это значение затем численно преобразуется к типу и виду переменной, о которой идёт речь. (Например, real :: r = b'0000001' + 1 инициализирует r значением 2.0.) Поскольку разные компиляторы реализуют расширение по-разному, следует проявлять осторожность при выполнении побитовой инициализации переменных, не являющихся целыми числами.

Обратите внимание, что инициализация переменной INTEGER оператором, таким как DATA i/Z'FFFFFFFF'/ вызовет ошибку целочисленного переполнения, а не ожидаемый результат -1, когда i — это 32-битное целое число на системе, поддерживающей 64-битные целые числа. Опция ‘-fno-range-check’ может использоваться как обходной путь для устаревшего кода, который инициализирует целые числа таким образом.

Далее: Индексы вещественных массивов, Предыдущее: Q порядок-буква, Вверх: Реализованные расширения в GNU Fortran [Оглавление][Индекс]

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-8.4.0/gfortran/BOZ-literal-constants.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API