为什么delphi BoolToStr true表示为-1

时间:2019-02-12 09:25:32

标签: delphi boolean pascal

Delphi函数BoolToStr将布尔值转换为字符串。

结果为true或false,或者分别为“数字”,“-1”和“ 0”。为什么是-1,而不是1?

2 个答案:

答案 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

进一步阅读: