Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   StrToBool: Boolean True = -1, False = 0 ? (https://www.delphipraxis.net/191372-strtobool-boolean-true-%3D-1-false-%3D-0-a.html)

a.def 8. Jan 2017 18:40

StrToBool: Boolean True = -1, False = 0 ?
 
Ich räume meinen Code gerade ein bisschen auf und das ist mir aufgefallen, dass ich an gewissen Stellen StrToBool verwende.
Warum wird bei True -1 und bei False 0 gespeichert? Ich habe eher mit True=1 und False=0 gerechnet?

nahpets 8. Jan 2017 18:48

AW: StrToBool: Boolean True = -1, False = 0 ?
 
0 = False, alles andere = True.

Ein Nonsensbeispielprogrämmelchen dazu:
Delphi-Quellcode:
program Test;
var
        i : Integer;
begin
  for i := -5 to 5 do begin
    if boolean(i) then ShowMessage(Format('%d ist wahr',[i])) else ShowMessage(Format('%d ist falsch',[i]));
  end;
end.

mkinzler 8. Jan 2017 19:19

AW: StrToBool: Boolean True = -1, False = 0 ?
 
und -1 ist das Komplementär zu 0.

00000000 = 0
11111111 = -1

markus5766h 8. Jan 2017 19:49

AW: StrToBool: Boolean True = -1, False = 0 ?
 
meine Bescheidenen Lösungen dafür :

Code:
function BoolToStr(Value : Boolean) : String;
begin
  if Value then Result := 'True' else Result := 'False';
end;

function StrToBool(Value : String) : Boolean;
begin
  Result := Value = 'True';
end;

function IntToBool(Value : Integer) : Boolean;
begin
  Result := Value = 1;
end;

function BoolToInt(Value : Boolean) : Byte;
begin
  //if Value then Result := 1 else Result := 0;
 Result := not (Value = 0);
end;

himitsu 9. Jan 2017 00:55

AW: StrToBool: Boolean True = -1, False = 0 ?
 
Delphi-Referenz durchsuchenStrToBool
Delphi-Referenz durchsuchenBoolToStr ... man beachte den zweiten Parameter :roll:

In C-Sprachen ist oftmals True = Integer(-1) und in Delphi/Pascal ist True = Byte(1).
Und das ist nur auf die Kostanten bezogen, wie bereits erwähnt wurde.
Bei Auswertung ist überall False = 0 und True <> 0.

Demnach ist IntToBool falsch und StrToBool versagt bei Zahlenwerten und anderer Groß-/Kleinschreibung.
IntToBool und BoolToInt passen auch nicht zusammen (der nicht auskommentierte Teil) und IntToBool gibt daher immer False zurück. :angle:

Es macht absolut keinen Sinn für Alles ständig eigene bescheidene Lösungen zu bauen, wo es gut funktionierende Standardfunktionen gibt, welche dagegen sogar richtig funktionieren. :zwinker:


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:00 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz