Excel VBA中的基本布尔问题:输出-1

Excel VBA中的基本布尔问题:输出-1,excel,vba,boolean,basic,Excel,Vba,Boolean,Basic,真*真*真=-1 当我乘以奇数个等于真的布尔变量时,结果是-1。为什么会这样 这不是: 真的,真的 与此相同: 1*1*1 为什么vba在计算时返回-1,而Excel返回1 我一直在使用这样的代码 如果Asb(真*真*真)=1,则 还是这个 如果为TRUE*TRUE*TRUE为0,则 我想了解为什么代码会以这种方式运行。事先谢谢你的解释 布尔数据类型只有两个可能值的数据类型,True(-1) 或假(0)。布尔变量存储为16位(2字节)数字。 请参阅数据类型摘要 在Vba布尔语言中 () 由于Do

真*真*真=-1

当我乘以奇数个等于真的布尔变量时,结果是-1。为什么会这样

这不是: 真的,真的

与此相同:

1*1*1

为什么vba在计算时返回-1,而Excel返回1

我一直在使用这样的代码

如果Asb(真*真*真)=1,则

还是这个

如果为TRUE*TRUE*TRUE为0,则

我想了解为什么代码会以这种方式运行。事先谢谢你的解释

布尔数据类型只有两个可能值的数据类型,True(-1) 或假(0)。布尔变量存储为16位(2字节)数字。 请参阅数据类型摘要

在Vba布尔语言中 ()

由于Double except 0为true,因此代码可以用如下所示的各种格式编写

Sub testString()
    Dim myBool As Boolean
    Dim str As String
    Dim n As Double

    str = "Mountain"

    n = InStr(str, "t") '<~~ 5
    If InStr(str, "t") > 0 Then
        MsgBox n
    End If

    '** below same
    If InStr(str, "t") Then
        MsgBox n
    End If

    '** below same
    If n Then
        MsgBox n
    End If

End Sub
子测试字符串()
Dim myBool作为布尔值
作为字符串的Dim str
双倍
str=“山”
n=InStr(str,“t”)'0那么
MsgBox n
如果结束
“**下同
如果是仪表(str,“t”),则
MsgBox n
如果结束
“**下同
如果n那么
MsgBox n
如果结束
端接头
布尔调试测试

您必须坚持使用-1和0表示正确和错误。要确认您的语言使用什么表示true,只需将零赋给变量(false),不必是布尔值,然后打印not(变量)即可确定什么是true。除非原始值为-1,否则这不会反过来工作。按位not运算符反转所有位,-1是一个两位数字,其中所有位均设置为零,所有位均清除为零。如果使用任何其他非零数指定变量,则在转换为布尔值时,使用按位not仍将返回true

二进制中的一个是十五个零和一个一。翻转所有这些位,你会得到15个1,然后是一个0,这是一个负值,因为第一个位表示负数,但它不会是负数。再次翻转所有位将返回其原始值-1


如果不清楚,请告诉我。

在VBA中,True字面上定义为-1,False字面上定义为0。例如,在VB编辑器的即时窗口中,请尝试以下操作:?真-1,还有?False-1只是出于好奇:为什么要将布尔值相乘?谢谢。我认为“真”的值应该是1。谢谢你的澄清。知道为什么在excel中,如果我将3个真布尔值相乘,结果是(1)而不是(-1)吗?excel将值0视为false,将任何其他数值视为true。
Sub testString()
    Dim myBool As Boolean
    Dim str As String
    Dim n As Double

    str = "Mountain"

    n = InStr(str, "t") '<~~ 5
    If InStr(str, "t") > 0 Then
        MsgBox n
    End If

    '** below same
    If InStr(str, "t") Then
        MsgBox n
    End If

    '** below same
    If n Then
        MsgBox n
    End If

End Sub