我假设在vba中类型Boolean
只是一个16位整数。那么为什么以及Debug.Print
如何区分这两者呢?
Debug.Print -1 = True
Debug.Print -1
Debug.Print True
将输出:
True
-1
True
答案 0 :(得分:6)
第1行计算结果为(如果-1等于true),则打印true,否则为print false
第2行评估打印-1(如您所知)
第3行评估打印为true(如您所知)
-1为真,VBA为0时为0
答案 1 :(得分:3)
你也可以假设一个字符串是一个字节数组,或者一个16位整数是一个0和1的系列。
答案是,因为VBA作为一种语言提供了布尔值的抽象。
这就是它的全部内容:知道和定义 True
和False
是Boolean
文字;它们各自的基础值只不过是管道工作才能使其工作: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),它是真的。
第二个打印整数。
第三个打印出布尔值。