Einzelnen Beitrag anzeigen

Robert Marquardt
(Gast)

n/a Beiträge
 
#15

Re: Warum ist ein Boolean so groß?

  Alt 26. Okt 2005, 10:09
Zitat von Muetze1:
Und genau deshalb ergibt Ord(Boolean(True)) immer 1
Das ist ein unsinniger Ausdruck. True ist bereits vom Typ Boolean. Eine Umtypung ist nicht noetig.

Mal genauer:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  B: Boolean;
  BB: ByteBool;
  WB: WordBool;
  LB: LongBool;
begin
  B := True;
  BB := B;
  WB := B;
  LB := B;
  ShowMessageFmt('%d %d %d %d', [Ord(B), Ord(BB), Ord(WB), Ord(LB)]);
end;
Das ergibt "1 -1 -1 -1".
Damit ist klar das ByteBool, WordBool und LongBool vorzeichenbehaftet sind (trotz ihres Namens).
Bei der Zuweisung von B wird eine Signextension vorgenommen, obwohl Boolean formal vorzeichenlos ist.
Intern wird fuer Boolean True auch definitiv 1 genommen. Aendert man naemlich Ord(B) im oben gezeigten Beispiel in Byte(B),
so wird immer noch "1" ausgegeben.
Der Grund fuer -1 als True in ByteBool etc ist Visual Basic das mit 0 und -1 in einem Long operiert.
  Mit Zitat antworten Zitat