Что означает «377» в Фортране 77? - PullRequest
0 голосов
/ 13 января 2020

Что означает «377» в Фортране 77? Когда я попытался напечатать, он выдает 255.

print*,"result", o'377'

, который возвращает

result 255

Ответы [ 2 ]

3 голосов
/ 13 января 2020

Это восьмеричное (базовое 8) представление. Восьмеричное число 377 - это 255 десятичное число или шестнадцатеричный FF.

0 голосов
/ 14 января 2020

Это то, что они называют буквенная константа :

Двоичная, восьмеричная или шестнадцатеричная константа ( буквенная константа ) представляет собой последовательность цифр, которая представляет упорядоченную последовательность битов. Такая константа имеет нет типа .

R764 боз-буквальная константа равна двоичная константа , восьмеричная константа или шестнадцатеричная константа R765 двоичная константа равно B ’ digit [ digit ] ... ’ или B " digit [ digit ] ... " C7107 (R765) digit должен иметь одно из значений 0 или 1. R766 восьмеричная равна O ’ digit [ digit ] ... ’ или O " digit [ digit ] ... " C7108 (R766) di git должен иметь одно из значений от 0 до 7. R767 шестнадцатеричная равна Z ’ hex-digit [ hex-digit ] ... ’ или Z " hex-digit [ hex-digit ] ... " R768 hex-di git равно di git или A через F

C7109 (R764) Должна появиться буквально-постоянная только в качестве data-stmt-constant в операторе DATA или где явно разрешено в 16.9 в качестве фактического аргумента процедуры intrinsi c.

источник: Стандартный раздел Fortran 2018 7.7

Как видно из стандарта, константа boz-literal не имеет типа и может появляются только в операторах данных или некоторых неявных функциях. Это означает, что запись:

print*,"result", o'377'

является недопустимым кодом, поскольку восьмеричное представление не имеет типа. Правильный код должен был выглядеть следующим образом:

print *, "result", INT(o'377')

Однако в Fortran 90 это также было бы недопустимым, так как в DATA-операторах можно было использовать только буквенные константы. Единственным допустимым способом было бы:

INTEGER :: constant
DATA constant /o'377'/
print *, "result", constant

note: Некоторые компиляторы допускают использование boz-literal-констант вне оператора DATA. Solaris-studio преобразует их в тип, требуемый контекстом. У других компиляторов могут быть разные варианты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...