首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么VBA认为-1 <3<2为真?

在 VBA 中,-1 < 3 < 2 被认为是真的,这是由于 VBA 在处理这种连续的比较操作时的逻辑。

VBA 实际上是将这个表达式拆分为两个独立的比较操作,并且使用逻辑与(AND)运算符将它们组合起来。具体步骤如下:

  1. 首先计算 -1 < 3,结果为真(True)。
  2. 然后计算 3 < 2,结果为假(False)。

在 VBA 中,真值被视为 -1,而假值被视为 0。因此,当使用逻辑与运算符将这两个结果组合起来时,即 True AND False,VBA 实际上执行的是 -1 AND 0

在 VBA 的逻辑运算中,-1 AND 0 的结果是 0,这在 VBA 中表示为假(False)。但是,由于 VBA 在处理连续比较时的特殊逻辑,它实际上是将 -1 < 3 的真值直接传递给下一个比较,而不是将其转换为布尔值再传递。因此,VBA 认为 -1 < 3 < 2 为真。

这种行为在 VBA 中是特定的,并且可能与您在其他编程语言中看到的行为不同。在其他语言中,连续的比较操作通常不会被这样处理。

要避免这种意外的行为,您可以显式地将比较操作分开,例如:

代码语言:txt
复制
If -1 < 3 And 3 < 2 Then
    ' 这里的代码不会执行,因为 3 不小于 2
End If

这样,您就可以确保每个比较操作都被正确地执行,并且结果符合您的预期。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 为什么Java中1==1为真,而128==128为假?基于享元模式的整数缓存原理分析

    今天我们来谈谈在Java中可能会让你感到惊讶的事情——为什么有时用==比较数字的行为并不像你期望的那样。...你可能会认为,在Java中比较两个数字时只要值相等它总是会返回true,因为两边的数字都是一样的,对吧?事实证明,在Java中并不总是那么简单。...Integer y = 1; System.out.println(x == y); // true 现在来解释一下为什么会发生这种情况,这与Java中的整数缓存有关。...分析 基本数据类型的比较: 对于基本数据类型int,1 == 1直接比较的是两个值,因此结果为true。...因此,a == b比较的是两个对象的引用,它们不同,所以结果为false。

    10010

    代码里-3>>1是-2但3>>1是1,-32却又是-1,为什么?

    ,即0x3按位取反之后0xfffffffc再加一,即为0xfffffffd 为什么会有这样的“奇怪”的补码形式呢?...所以-3 >> 1的过程应该是这样的: 0xfffffffd右移一位是0x7ffffffe,然后再置位最高位符号位,结果为:0xfffffffe,这就是-2的补码表现形式。...整型数字的除法(-3/2为啥等于-1) 那么为啥-3/2等于-1,难道在做除法的时候不会用移位进行优化吗? 多说无益,只能按照套路来反汇编,还是一样的套路代码。...ip寄存器中,但是不会更新cpsr寄存器 it mi //判断cpsr中的Negative Flag negmi r1, r1 //如果r1为负数则改成正数 subs r2, r1,...#1 beq.w 1095a 3_skip_div0_test+0x24c> //如果r1为1则跳转 movs r3, r0 it mi negmi r3, r0

    1.1K20

    在WPS里面A1和B1为合并标题项目,A2与A3为合并编码项,B2与B3为单独项目,分解为4列

    如果需要使用合并打印功能,则需要将数据改成列,这样在调用中才不会出错,本次客户发的表格数据如下:我们需要的数据如下:二、表格公式转换如何将客户发的表格数据转换为我们需要的表格数据,本次我使用到的函数公式为:...=INDEX(A:B,ROW()*3-{5,4,4,3},{1,1,2,2})  三、公式解读这个公式是WPS中的INDEX函数与ROW函数、乘法、减法、大括号等其他函数的组合使用。...减去{5,4,4,3}这个序列表示在增加的行号上减去不同的数值,得到新的行号序列。然后,INDEX(A:B,行号序列,{1,1,2,2})表示在A:B范围内,根据行号序列返回对应的单元格内容。...大括号{1,1,2,2}表示返回的列号序列,第一个数字1表示第一列,第二个数字1表示第二列,以此类推。综上所述,这个公式的目的是在A:B范围内,根据计算出的行号序列和列号序列,返回对应的单元格内容。...2、点击【文件】菜单选项,从列表选项中找到【合并打印】选项,再从子列表中点击【创建新文本】选项。3、点击【下一步】进入到“添加域”窗口页面,我们可以在选项框中添加文档日期,题目等需要编辑的内容。

    27310

    为什么不是0,1,2,3,4?setTimeout的奇怪问题

    网上看到这样一个题目: for(let i=0;i<5;i++){ setTimeout(function(){alert(i)},0) } 它输出的顺序并不是0,1,2,3,4,也不是固定的某一个顺序的数字...为什么是这样呢?...其实这里有三个关键点, 1、let,它声明了一个块级作用域; 2、alert,它引起了js的阻塞; 3、setTimeout添加到js队列; 简单的讲, 1、js中没有任何可以立即执行的代码,它们都是需要被添加到队列中...2、setTimeout并不是指定了间隔时间就一定会按指定时间执行。它只是说“在指定时间之后,加入队列,等待执行”。至于什么时候执行,要看进程队列的空闲程度。...3、alert()它会阻塞js的执行,此时js进程是暂停的。 4、题目中使用的是let,这相当于是使用闭包的方式来传入值。如果是var,那么就是直接执行完i=5之后再执行alert了。

    66790

    大厂面试题分享:如何让(a===1&&a===2&&a===3)的值为true?

    当我第一次看到这一题目的时候,我是比较震惊的,分析了下很不合我们编程的常理,并认为不大可能,变量a要在同一情况下要同时等于1,2和3这三个值,这是天方夜谭吧,不亚于哥德巴赫1+1=1的猜想吧,不过一切皆有可能...我的思路来源于更早前遇到的另外一题相似的面试题: // 设置一个函数输出一下的值 f(1) = 1; f(1)(2) = 2; f(1)(2)(3) = 6; 当时的解决办法是使用toString或者valueOf...当然下面这题原理其实也是一样的,附上解法: // 设置一个函数输出一下的值 f(1) = 1; f(1)(2) = 2; f(1)(2)(3) = 6; function f() { let args...class A extends Array { join = this.shift; } const a = new A(1, 2, 3); if (a == 1 && a == 2 && a ==...; } 我们的探寻之路还没结束,细心的同学会发现我们题目是如何让(a===1&&a===2&&a===3)的值为 true,但是上面都是讨论宽松相等==的情况,在严格相等===的情况下,上面的结果会不同吗

    83720

    iOS真机调试:1、如何成为开发者2、配置真机调试证书的步骤3、开启僵尸对象(Zombie Objects)来定位内存问题

    1、 你的电脑必须具备真机调试功能,需要一个cer证书文件。...加入开发者计划(花钱) 1.真机调试:管理发布证书,和调试证书 包括消息推送、PP 等证书 2.发布程序 个人/公司:99美元--RMB 688 共同点:只能发布APPStore,都能让多台电脑进行调试...2.2、 配置真机调试证书的步骤 1).登录开发者主页 https://developer.apple.com/membercenter/index.action 2).生成cer证书:cer是一个跟电脑相关联的证书文件...利用Xcode查看真机设备的唯一标识(插上USB数据线) 5).生成MobileProvision文件:结合2、3、4生成一个手机规定文件 6).导入cer、MobileProvision文件 2 最终会得到...2个文件 1、Cer文件:让电脑具备真机调试的功能 2、 MobileProvision文件:哪台设备、哪些app、哪台电脑需要做真机调试?

    77120

    为什么CPU缓存会分为一级缓存L1、L2、L3?有什么意义?

    我们来简单地打个比方:如果CPU在L1一级缓存中找到所需要的资料要用的时间为3个周期左右,那么在L2二级缓存找到资料的时间就要10个周期左右,L3三级缓存所需时间为50个周期左右;如果要到内存上去找呢,...运行速度方面:L1最快、L2次快、L3最慢;容量大小方面:L1最小、L2较大、L3最大。...L2二级缓存比L1一级缓存的容量要更大,但是L2的速率要更慢,为什么呢?...;而AMD Athlon 64 X2处理器则是每个CPU核心都具备独立的二级缓存,Manchester核心的处理器为每核心512KB、Toledo核心为每核心1MB,两个核心之间的缓存的数据同步是通过CPU...L1的运行速度很快,但是它的数据容量很小,CPU能在L1里命中的概率大概在80%左右——日常使用的情况下;L2、L3的机制也类似如此,这样一来,CPU需要在内存中读取的数据大概为5%-10%,其余数据命中全部可以在

    44010

    1.写在前边的话,为什么要写CitHub?2.GitHub 是什么?3.注册 GitHub

    1.写在前边的话,为什么要写CitHub? 跟朋友在交流的时候听到求职的时候发现有些公司要附Github帐号,一个优秀的 GitHub 账号当然能让你增色不少。...2.GitHub 是什么? gitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名gitHub。 ?...3.注册 GitHub 1.先去 GitHub 官网「https://github.com」注册「Sign Up」个账号,注册页面如下: ?...2.设置及完善你的 GitHub ? 到设置页面来设置一些基本信息: ?...3.一些 GitHub 的基本概念 Repository 仓库的意思,即你的项目,你想在 GitHub 上开源一个项目,那就必须要新建一个 Repository ,如果你开源的项目多了,你就拥有了多个

    70930

    【项目实战】自监控-01-开启篇

    真的该时不时抬抬头看看世界,你做的事情可能早就有更快更好的方式去解决了 可能只有你还在傻傻的自认为自己很辛苦。...很多都是查百度,然后学习,然后使用,哈哈 Plus:目前我还是菜鸟,因为之前学习的是VBA,所以很多思路其实感觉还是向那边靠近,哈哈 Part 3:开篇小菜:文件操作,涉及模块os 获取当前文件夹路径,...的缩写 chdir可以记忆为change-directory的缩写,没有经过确认啊,只是我觉得比较好记忆 path1 = "F:\\【10】微信\\Python\\【2】文章\\20170719-项目1...项目1:数据自监控\\folder1" path2 = "F:\\【10】微信\\Python\\【2】文章\\20170719-项目1:数据自监控\\folder2\\q.xlsx"if os.path.exists...总结:总体来说介绍一些os.path下的一些实用功能,很多以前VBA中要自己写的,Python都是有现成的函数,棒!去做正真需要思考的事情! ----

    51310

    VBA中重要的强制申明,谁看谁明白

    2.这些掌握了,你才敢说自己懂VBA 3.VBA变量5年踩坑吐血精华总结 image.png 好了,闲话不多说,直接上干货~ 1.强制申明 行话说:强制申明用得好,VBA臭虫(bug)减不少 先看下...」按钮 image.png (2)读取第1句「x = Cells(2, 2)」 image.png VBA说: 先看右边,「Cells(2, 2)」我认识,表示「单元格B2」,它的值是4。...[备注] 1.VBA遇到不认识的内容,就会新建一个变量;同时,如果该变量没有赋值,就默认为0; 2.VBA执行语句次序为:从上到下、从右向左; (3)读取第2句「h = Cells(4, 2)」 image.png...(3)读取第3句「Cells(x, 10) = Cells(x, 6) * Cells(x, 8) + h1」 image.png VBA说: 先看右边,「Cells(x, 6)」我认识,x=4,所以它表示...所以,结合这个特点,在VBA里使用「强制申明」,主要由以下3个主要优点(小本本记下来,我们下期考): (1)正确使用「强制申明」能够帮助我们快速定位错误代码,发现错误; (2)正确使用「强制申明」能够提升程序的运行效率

    1.6K30
    领券