【问题标题】:Basic Boolean Question in Excel VBA: Output -1Excel VBA 中的基本布尔问题:输出 -1
【发布时间】:2020-03-12 06:44:11
【问题描述】:

真*真*真=-1

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

这不是: 真*真*真

和这个一样:

1 * 1 * 1?

为什么 vba 返回 -1,而 Excel 在评估时返回 1?

我一直在用这样的方式写代码

如果 Asb(TRUE * TRUE * TRUE) =1 则...

或者这个

如果 TRUE * TRUE * TRUE 0 则 ...

我想了解为什么代码会这样。提前感谢您的解释。

【问题讨论】:

  • 在 VBA 中,True 的字面意思是 -1,而 False 的字面意思是 0。
  • 例如,在 VB 编辑器的即时窗口中,试试这些:真 -1 还有 ?假-1
  • 只是为了好奇:为什么要乘一个布尔值?

标签: excel vba boolean basic


【解决方案1】:

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

https://docs.microsoft.com/en-us/office/vba/language/glossary/vbe-glossary#data-type

【讨论】:

  • 谢谢。我认为 true 的值为 1。感谢您的澄清。知道为什么在 excel 中如果我将 3 个真正的布尔值相乘,结果是 (1) 而不是 (-1)?
  • Excel 将值 0 视为 false,将任何其他数值视为 true。
【解决方案2】:

你必须坚持 -1 和 0 来判断真假。要确认您的语言用于 true,只需将零分配给变量 (false),不必是布尔值,然后打印 not(variable) 以确定什么是 true。除非原始值为-1,否则这不起作用。按位非运算符反转所有位,-1 是一个两位数,其中所有位都被设置,零所有位都被清除。如果您为变量分配任何其他非零数字,则使用按位 not 转换为布尔值时仍会返回 true。

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

如果不清楚,请告诉我。

【讨论】:

    【解决方案3】:

    在 Vba 中布尔值 (https://docs.microsoft.com/en-us/dotnet/api/system.boolean?view=netframework-4.8)

    False  :  0
    True  :  ..., -3,-2.5,-2,-1.5, -1,1.5,2,1.5,3,......
    

    由于Double except 0为真,代码可以写成各种格式,如下所示。

    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
    

    布尔调试测试

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-30
      • 1970-01-01
      相关资源
      最近更新 更多