【发布时间】:2017-09-20 19:44:18
【问题描述】:
我正在使用用 VB 编写的遗留代码库,遇到了一个我不理解的条件运算符,无法弄清楚要搜索什么来解决它。
我正在处理的是以下代码和结果为 true 的变量。我不明白的具体部分是(1)第一个X和第一个parens(-2之间的关系和(2)X < 2的作用
- 如果
X是低于-2的值,则计算结果为false。 - 如果
X的值高于2,则计算结果为true。 - 如果
Y低于5,则它按预期计算为true。
X = 3
Y = 10
If X > (-2 And X < 2) Or Y < 5 Then
'True
Else
'False
End If
【问题讨论】:
-
不确定到底发生了什么(因此只是一个评论),但我敢打赌这里的技巧依赖于
And是一个 bitwise 运算符这一事实,而不是而不是直接的条件运算符。如果有任何借口,我会重新编写它以便更容易理解它是如何遵循规范的。现有代码可能比更容易理解的代码更快,但我怀疑这种表达方式是否会以一种有意义的方式提高应用程序的性能。 -
@JoelCoehoorn - 我也完全同意重写它,因为它对性能并不重要。不幸的是,我不知道代码库的这个特定部分中逻辑运算符的初衷,因此试图弄清楚它可能试图解决什么:/
-
您将整数与布尔值进行比较。和一个整数的布尔值。这让编译器很头疼,需要对其进行整理。可能有点令人惊讶的结果是 True 等于 -1。这是一个相当出色的举措,可确保 And 和 Or 运算符既可以用作位运算符,也可以用作逻辑运算符。最好不要让编译器头疼,它也不会让你头疼。
-
你能确定输出是确实想要的吗?我没有任何证据支持这一点,但我有一种感觉,只是感觉这段代码有错别字,原意是简单写
If (X > -2 And X <2) Or Y < 5,不涉及按位运算,因此可以通过替换来优化And&Or与AndAlso&OrElse。如果您能提供更多上下文,也许我们可以找到证据来证明或反驳这一点。
标签: vb.net conditional logical-operators