Почему delphi BoolToStr true представлен как -1 - PullRequest
0 голосов
/ 12 февраля 2019

Функция Delphi BoolToStr преобразует логическое значение в строку.

Результатом может быть либо true, либо false, либо 'numeric', '-1' и '0' соответственно.Почему -1 а не 1?

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Возможное объяснение состоит в том, что логическое значение обычно хранится не в одном бите, а в целом числе.Если вы сделаете побитовое not целое число 0 (двоичное 0000 0000 ...), оно будет двоичным 1111 1111 ....), что означает -1 для двух дополнений со знаком целых чисел.

Такесли вы говорите, false := 0; true := not false;, то имеет смысл, что истина равна -1.

На различных основных диалектах истина также равна -1 по той же причине.

0 голосов
/ 12 февраля 2019

Источником этих конкретных значений, безусловно, являются значения 0 и -1, являющиеся значениями, используемыми булевым типом COM.

Конечно, в более старых версиях Delphi RTL эта функция использовалась, когдапреобразование вариантов из одного типа в другой, поэтому я был бы достаточно уверен, что причиной этого решения была поддержка COM-вариантов.

Вы можете увидеть остатки этого оригинального кода сегодня в VariantChangeSimpleIntoSimple, найденном в System.VarUtils.Когда его просят преобразовать varBoolean в varOleStr, он делает:

VarOleStrFromStr(Dest, BoolToStr(LSource.VBoolean))

Дальнейшее чтение:

...