我刚刚发现了这个可爱的事实。显然,Visual Basic
也是这样……也许答案是相似的?也许它也适用于其他语言?
很明显,这仅适用于某些编译器-就我而言,使用pgf90
PGI编译器。它不适用于gfortran
。
答案 0 :(得分:3)
此(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
无论如何,唯一可以保证的是有两个不同的值TRUE和FALSE。它们在内存中的外观取决于编译器。有两个明显的选择。将所有位设置为1,将所有第一位设置为1。第一个是-1的整数,另一个是+1。
例如,上面的代码可以
> ifort trueint.f90
> ./a.out
-1
> ifort trueint.f90 -standard-semantics
> ./a.out
1
> gfortran trueint.f90
> ./a.out
1
对于real
,它甚至更加复杂。我不知道你如何取得结果。