Это (int(.true.)==-1
) НЕ соответствует . Ну, по крайней мере, не в целом.
Во-первых, вы не должны вызывать int()
с логическим аргументом. Но ваш компилятор может разрешить это как расширение.
> gfortran realinttrue.f90
realinttrue.f90:1:13:
print *,real(.true.), int(.true.)
1
Error: ‘a’ argument of ‘real’ intrinsic at (1) must have a numeric type
realinttrue.f90:1:26:
print *,real(.true.), int(.true.)
1
Error: ‘a’ argument of ‘int’ intrinsic at (1) must have a numeric type
Возможно, вы имели в виду это вместо:
print *, transfer(.true.,1)
end
В любом случае, единственное, что гарантировано, - это два разных значения, ИСТИНА и ЛОЖЬ. Как они выглядят в памяти, зависит от компилятора. Есть два очевидных варианта. Установите все биты в 1, все установите первые биты в один. Первый - целое значение -1, другой - + 1.
Например, приведенный выше код делает
> ifort trueint.f90
> ./a.out
-1
> ifort trueint.f90 -standard-semantics
> ./a.out
1
> gfortran trueint.f90
> ./a.out
1
Для real
это еще сложнее. Я понятия не имею, как вам удалось получить свой результат.