【问题标题】:Why does VBA consider -1 < 3 < 2 to be True?为什么 VBA 认为 -1 < 3 < 2 为真?
【发布时间】:2020-08-20 10:01:19
【问题描述】:

我有一个 If 语句来检查一个值是否在两个整数之间。一个简单的检查,我想我可以通过 -1 &lt; x &lt; 2 解决,其中 x 包含任何整数。

但是,例如,当 x = 3 时,VBA 认为该陈述是正确的,即使情况显然不是这样。

我知道我可以通过使用If -1 &lt; x And x &lt; 2 Then 来简单地避免这个问题,但我想知道为什么前一个语句没有产生预期的输出。我尝试在网上寻找答案,但没有找到任何答案。

【问题讨论】:

  • 不具体了解 VBA,但在大多数编程语言中,运算符一次只处理一个。 -1 &lt; x &lt; 2 --> (-1 &lt; x ) &lt; 2 --> true &lt; 2 --> 1 &lt; 2 --> true(与数字相比,布尔值 true 通常强制为 1。)
  • @Guy Incognito:你说得对,除了True,这不是1,而是-1。在大多数编程语言中都是如此,因为 -1 的二进制表示将所有位都设置为 1。
  • 感谢@GuyIncognito。我尝试使用-1 &lt; 2 &lt; 0 进行检查,这应该按照您的逻辑解析为(-1 &lt; 2) &lt; 0 --> true &lt; 0 = 1 &lt; 0 --> False。但是,true 已返回。 VBA 将True &lt; x 视为始终正确,或者您的解释对 VBA 不正确
  • @FunThomas 谢谢托马斯,我喜欢纯 0。要是我的教授也这么想就好了..
  • @FunThomas 很公平,但我认为 VBA 在这里是一个例外,所有主要语言都强制为 1(C、C++、Java、Javascript、Python ......)我从未听说过或看到 true 转换为 -1。

标签: vba if-statement


【解决方案1】:

在 VBA 中,-1 &lt; 3 &lt; 2 被评估为 (-1 &lt; 3) &lt; 2

(-1 &lt; 3) 是True。

需要注意的重要一点是,在 VBA 中,True 等于 -1。

-1 &lt; 2 是True。

【讨论】:

  • 谢谢,就是这样。我之前评论过-1 &lt; 2 &lt; 0 如何导致True 思考True = 1,但由于True = -1 我测试了-6 &lt; -5 &lt; - 4,它等于False,正如预期的那样。
猜你喜欢
  • 2015-12-23
  • 1970-01-01
  • 1970-01-01
  • 2010-10-02
  • 1970-01-01
  • 1970-01-01
  • 2016-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多