Fortran逻辑比较

Fortran逻辑比较,fortran,comparison,logical-operators,Fortran,Comparison,Logical Operators,我不明白为什么这一个被评估为错误的 A = .false. B = .true. (A.eqv..true..or.B.eqv..true.)给了我。假 我必须添加括号才能使条件语句正常工作。谁能给我解释一下吗?我想这是操作规程.or.我认为它的操作顺序比.eqv. 所以你的陈述相当于 ((A .eqv. (.true. .or. B)) .eqv. .true.) ((A .eqv. .true. ) .eqv. .true.) ( .false.

我不明白为什么这一个被评估为错误的

A = .false.
B = .true.
(A.eqv..true..or.B.eqv..true.)给了我。假


我必须添加括号才能使条件语句正常工作。谁能给我解释一下吗?

我想这是操作规程
.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.或.B)
,但我想这不是重点;)

我认为这是操作顺序
.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)
,但我想这不是重点;)

你的答案可以更加肯定:它是正确的。例如,有关运算符优先级,请参见Fortran 2008的表7.1。在没有看到声明等的情况下,
A.eqv..true.
不能替换为
A
。您可以更确定地回答:它是正确的。例如,有关运算符优先级,请参见Fortran 2008的表7.1。在没有看到声明等的情况下,
A.eqv..true.
不能替换为
A