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只是修复了部分的顺序,还更改了格式以使用语义标题。
这取决于您是否在调试器中。真的?嗯,有点像。
当然,括号是第一位的。然后是算术(+、-、*、/,等等)。然后比较(>、
If A < B And B < C Then
您可以保证,
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库),您的计算机上就会有它。
逻辑运算符的计算顺序如下:
Not
And
Or
Xor
Eqv
Imp
本主题还解释了比较运算符和算术运算符的优先级。
我建议,一旦你算出进位,你就加上括号,除非有充分的理由不编辑代码。
如果我不必读别人的代码,这是个不错的选择…
哦,我感觉到你的痛苦。我在回答中多加了一些。运算符优先级在VB6帮助中
+1对于建议,因为它仍然是很好的建议。顺便说一句,我不明白为什么人们首先要把这么多的操作符塞进一行代码中。有时我希望语言没有定义优先顺序,这样人们就必须使用括号来明确他们要完成的到底是什么。我想总是有口齿不清…