TRUE 的数值相当于 -1?

Mit*_*hil 4 fortran logical-operators visual-studio visual-studio-2012 intel-fortran

我正在 Visual Studio 2012 中使用 Intel Fortran 来编译 Fortran 代码。当我尝试使用逻辑运算符时,我注意到独立的逻辑表达式会按预期产生 T 或 F。但是,如果我需要数字 T 或 F(0 或 1),当逻辑结果为 T 时我会得到 -1。

例如:

integer*4 a
a = 1
logicval = (node(5,L).gt.0)
numval =  1*(node(5,L).gt.0)
write(*,*) logicval, numval
Run Code Online (Sandbox Code Playgroud)

会输出

时间,-1

有没有办法可以重新定义分配给 T 和 F 的数值?

Ste*_*nel 5

正如其他人所说,这种非标准用法的英特尔 Fortran 默认值是具有低位设置(奇数)的整数值是 true,偶数值(低位清除)是 false。常数.TRUE。位模式为-1。当您进行转换时,情况会变得更加复杂,直到版本 17 为止,编译器在这方面还没有完全一致。请注意,如果您使用 -standard-semantics,则隐含 -fpscomp 逻辑。

请阅读https://software.intel.com/en-us/forums/intel-visual-fortran-compiler-for-windows/topic/275071#comment-1548435以及版本 17 发行说明 ( https://software .intel.com/en-us/articles/intel-fortran-compiler-170-release-notes)了解该版本中有关如何处理数字逻辑转换的更改的信息。

  • 多谢。您的链接帖子非常有帮助。顺便说一句,您在英特尔网站上的回答/帖子非常有帮助,并且多次为我提供了巨大帮助。 (2认同)