MQL4中关于逻辑表达式的疑惑

 

写了不知道多少个EA了,从来没有遇到逻辑表达式解释不清的时候。但是今天在分析别人的程序时遇到了一个怪现象,就是逻辑运算符的优先级问题。

经验是优先级由高往低:括号,与,或

下面两个例子很有意思:

1. true && false && true || true 我理解计算次序是 ((true && false) && true) || true = true

2. true && true && true || true, 我理解计算次序是 ((true && true) && true) || true = true

这点,在其它编程语言,例如VC、VB中已经验证是正确的。

但在MQL4中,嘿嘿,你们验证一下他们的结果吧!

Print(true && false && true || true); 结果是 0 (false)

Print(true && true && true || true); 结果是 1 (true)

为什么表达式1的结果会是false呢,难道是||运算符比&& 优先级高吗?!

 

经过大量测试证实, MQL4(Version 4.0 Bulid 226)中,确实在逻辑运算符的优先级上不同于其他的语言。

传统习惯先计算 与(and),再计算 或(or).

实例证明,优先级颠倒了,难道只是这个版本的问题?真的没有道理啊!

MT4 主文件:

例1: F && F || T,正常理解应该为 T,MT4 给出 F

例2: T || F && F, 正常理解应该为 T,MT4 给出 F

这两个例子证明了,MT4的运算次序是

例1 :F && (F || T) = F

例2: (T || F) && F = F

 

MQL本来就不完美,MT也从没声明它与其它语言完全一样。 干吗那么相信它?

自己加括号保险些。