Delphi函数BoolToStr将布尔值转换为字符串。
结果为true或false,或者分别为“数字”,“-1”和“ 0”。为什么是-1,而不是1?
答案 0 :(得分:8)
一个可能的解释是布尔值通常不存储在单个位中,而是存储在整数中。如果对整数0(二进制0000 0000 ...)按位进行not
,它将是二进制1111 1111...。),这意味着对两个补码有符号整数为-1。
因此,如果您说false := 0; true := not false;
,则将true设为-1是合理的。
出于各种原因,在各种BASIC方言中,true也是-1。
答案 1 :(得分:7)
这些特定值的来源肯定是0
和-1
,它们是COM布尔类型使用的值。
在较旧的Delphi RTL版本中,肯定是在将变体从一种类型转换为另一种类型时使用了此功能,因此我有理由相信,COM变体支持是此决定的原因。
您现在可以在VariantChangeSimpleIntoSimple
的{{1}}中看到该原始代码的剩余部分。当要求将System.VarUtils
转换为varBoolean
时,它会这样做:
varOleStr
进一步阅读: