Fortran 逻辑比较

Fortran logical compare

不明白为什么这个被评价为false

A = .false.
B = .true.

(A .eqv. .true. .or. B .eqv. .true.) 给我 .false.

我必须添加括号才能使我的条件语句生效。谁能给我解释一下?

我认为是操作顺序。 .or. 我认为运算顺序比 .eqv.

所以你的陈述等同于

((A .eqv. (.true. .or. B)) .eqv. .true.)
((A .eqv.     .true.     ) .eqv. .true.)
(     .false.              .eqv. .true.)
                .false.

虽然不确定。

无论哪种方式,都可以很容易地用括号强制执行预期的顺序:

((A .eqv. .true.) .or. (B .eqv. .true.))

(当然,您的示例可以压缩为 (A .or. B),但我想这不是重点;))