What is the operator precedence order in Visual Basic 6.0?
Visual Basic 6.0(vb6)中的运算符优先顺序是什么?
尤其是逻辑运算符。
算术运算优先顺序
^
-(一元否定)
*、/。
\
Mod
+、-(二进制加减)
&
比较运算优先顺序
=
<>
<
>
<=
>=
Like、Is。
逻辑运算优先顺序
Not
And
Or
Xor
Eqv
Imp
资料来源:SAMS 24小时自学Visual Basic 6-附录A:操作员优先权
- 订单是什么?从最低到最高?
- 答案的陈述可能有点误导性。三个类别内的顺序是先到后,但类别本身的顺序是先到后:实际上,算术运算是在比较运算之前评估的,而算术运算是在逻辑运算之前评估的。为了更清楚地表达,我建议先进行算术运算,然后进行比较运算,再进行逻辑运算。这里也有很好的参考资料:msdn.microsoft.com/en-us/vba/language-reference vba/articles&zwnj;&8203;/&hellip;
- @Markkukero只是修复了部分的顺序,还更改了格式以使用语义标题。
这取决于您是否在调试器中。真的?嗯,有点像。
当然,括号是第一位的。然后是算术(+、-、*、/,等等)。然后比较(>、<、=,等等)。然后是逻辑运算符。诀窍是给定优先级内的执行顺序未定义。给出以下表达式:
您可以保证,<不等式运算符在逻辑And比较之前都将被评估。但你不能保证先进行哪个不平等比较。
iirc,调试器从左到右执行,但编译后的应用程序从右到左执行。我可以把它们倒过来(已经很久了),但重要的是它们是不同的。实际优先级不会改变,但执行顺序可能会改变。
- 乔尔,这是否意味着,如果左边的计算结果是真的,那么一个或操作(永远)不能跳过右边,如果左边的计算结果是真的,那么对于和假的计算结果也是一样的?
- [奥斯卡]:是的。NET定义了执行顺序,并使用Andalso和OrElse逻辑运算符进行短路评估。但vb6总是计算表达式的两边。您必须使用附加的if/else语句来模拟它。
- 对。大多数现代语言支持短路评估(en.wikipedia.org/wiki/short-circuit_evaluation),但vb6(和不带andalso的vbnet)不支持。
- 在K&R手册中,建议您的代码不应在逻辑操作总是短路的情况下中继-标准不强制执行此操作,也不强制执行评估顺序。即使在Perl中,它们总是短路的,依赖它的代码也被认为是不好的选择。
- 很少有语言在这样的语句中指定了精确的计算顺序-通常编译器可以自由地按照它被认为更高效/快速/安全等的方式来进行计算。不应该用任何语言编写依赖于执行顺序的代码!
- 实际上是一条旁道,但在Perl中,在诸如或die"cannot do it"这样的结构中,依赖优先级是很常见的;但是同意,当前面的人在复杂的语句中不依赖优先级时,生活会更好。
- 如果您在这样的表达式中编写了依赖于执行顺序的代码,那么您所得到的一切都是应得的!"如果最终维护你的代码的人是一个暴力的精神病患者,他知道你住在哪里。"
使用括号
编辑:这是我对新代码的建议!但是奥斯卡正在读别人的密码,所以一定要想办法弄清楚。我建议使用vb6手册主题运算符优先级。不幸的是,此主题似乎不在msdn联机vb6手册中,因此我将在此处粘贴逻辑运算符信息。如果安装了vb6帮助(msdn库),您的计算机上就会有它。
逻辑运算符的计算顺序如下:
1 2 3 4 5 6
| Not
And
Or
Xor
Eqv
Imp |
本主题还解释了比较运算符和算术运算符的优先级。
我建议,一旦你算出进位,你就加上括号,除非有充分的理由不编辑代码。
- 如果我不必读别人的代码,这是个不错的选择…
- 哦,我感觉到你的痛苦。我在回答中多加了一些。运算符优先级在VB6帮助中
- +1对于建议,因为它仍然是很好的建议。顺便说一句,我不明白为什么人们首先要把这么多的操作符塞进一行代码中。有时我希望语言没有定义优先顺序,这样人们就必须使用括号来明确他们要完成的到底是什么。我想总是有口齿不清…