为什么Debug.print区分Boolean和Integer?

时间:2017-10-04 14:09:30

标签: vba excel-vba excel

我假设在vba中类型Boolean只是一个16位整数。那么为什么以及Debug.Print如何区分这两者呢?

Debug.Print -1 = True
Debug.Print -1
Debug.Print True

将输出:

True
-1  
True

3 个答案:

答案 0 :(得分:6)

第1行计算结果为(如果-1等于true),则打印true,否则为print false

第2行评估打印-1(如您所知)

第3行评估打印为true(如您所知)

-1为真,VBA为0时为0

答案 1 :(得分:3)

你也可以假设一个字符串是一个字节数组,或者一个16位整数是一个0和1的系列。

答案是,因为VBA作为一种语言提供了布尔值的抽象

这就是它的全部内容:知道定义 TrueFalseBoolean文字;它们各自的基础值只不过是管道工作才能使其工作:False映射到0,任何非零值都会转换为True,并返回布局为-1到数字转换。

IOW,这不是关于Debug.Print,而是关于VBA的类型系统。

答案 2 :(得分:3)

布尔变量存储为16位(2字节)数字,但它们只能是True或False。

  

当其他数字类型转换为布尔值时,0变为   False和所有其他值变为True。   当布尔值转换为其他数据类型时,False变为0,True变为-1。

在你的第一个Debug.Print上你评估一个表达式(-1 = True),它是真的。

第二个打印整数。

第三个打印出布尔值。

Boolean Data Type