【发布时间】:2020-08-20 10:01:19
【问题描述】:
我有一个 If 语句来检查一个值是否在两个整数之间。一个简单的检查,我想我可以通过 -1 < x < 2 解决,其中 x 包含任何整数。
但是,例如,当 x = 3 时,VBA 认为该陈述是正确的,即使情况显然不是这样。
我知道我可以通过使用If -1 < x And x < 2 Then 来简单地避免这个问题,但我想知道为什么前一个语句没有产生预期的输出。我尝试在网上寻找答案,但没有找到任何答案。
【问题讨论】:
-
不具体了解 VBA,但在大多数编程语言中,运算符一次只处理一个。
-1 < x < 2-->(-1 < x ) < 2-->true < 2-->1 < 2-->true(与数字相比,布尔值 true 通常强制为 1。) -
@Guy Incognito:你说得对,除了
True,这不是1,而是-1。在大多数编程语言中都是如此,因为 -1 的二进制表示将所有位都设置为 1。 -
感谢@GuyIncognito。我尝试使用
-1 < 2 < 0进行检查,这应该按照您的逻辑解析为(-1 < 2) < 0-->true < 0=1 < 0-->False。但是,true已返回。 VBA 将True < x视为始终正确,或者您的解释对 VBA 不正确 -
@FunThomas 谢谢托马斯,我喜欢纯 0。要是我的教授也这么想就好了..
-
@FunThomas 很公平,但我认为 VBA 在这里是一个例外,所有主要语言都强制为 1(C、C++、Java、Javascript、Python ......)我从未听说过或看到 true 转换为 -1。
标签: vba if-statement