经过大量测试证实, 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也从没声明它与其它语言完全一样。 干吗那么相信它?
自己加括号保险些。
写了不知道多少个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呢,难道是||运算符比&& 优先级高吗?!