为什么delphi BoolToStr true 表示为-1

Why delphi BoolToStr true is represented as -1

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

结果为 true 或 false,或者分别为 'numeric'、'-1' 和 '0'。为什么是 -1 而不是 1?

这些特定值的来源肯定是 0-1 是 COM 布尔类型使用的值。

当然,在旧版本的 Delphi RTL 中,将变体从一种类型转换为另一种类型时会使用此函数,因此我有理由相信 COM 变体支持是该决定背后的原因。

您现在可以在 System.VarUtils 中的 VariantChangeSimpleIntoSimple 中看到该原始代码的残余。当要求将 varBoolean 转换为 varOleStr 时,它执行:

VarOleStrFromStr(Dest, BoolToStr(LSource.VBoolean))

进一步阅读:

一个可能的解释是,布尔值通常不是存储在单个位中,而是存储在整数中。如果您对整数 0(二进制 0000 0000 ...)执行按位 not,它将是二进制 1111 1111 ....),这意味着 -1 表示两个补码有符号整数。

因此,如果您说 false := 0; true := not false;,则 true 为 -1 是有道理的。

在各种BASIC方言中,出于同样的原因,true也是-1。