Hallo
der Vergleich mit zwei Blatt Papier oder 100 L Wasser ist ja sehr anschaulich, aber meiner Meinung nach nicht mal richtig.
Was die Lösung ist, hab ich ja selbst gepostet.
Zitat:
so ist es ja nicht, aber das Ergebnis kann nicht grösser sein als die Variable, in der das Ergebnis gespeichert werden soll - logisch, man kann ja auch nicht 100 l Wasser in einer Sprudelflasche unterbringen. Das sind Grundlagen der Datenverarbeitung überhaupt: im Computer gibt es keine unendlich grossen Zahlen, daher gibt es bei JEDEM Datentyp Zahlen, die nicht mehr hineinpassen.
Ja in welcher Variable wird das Ergebniss gespeichert? In der Integer Variable 'nPotenz'? Kann nicht sein, denn wenn ich 'nPotenz : Integer' als 'nPotenz : Word' deklariere, müsste nach eurer Meinung bei 65535 Schluss sein, bzw. ein Überlauffehler kommen. Ist aber nicht so.
Delphi-Quellcode:
var
nSize : Int64;
nPotenz : Word;
nPotenz := 1024;
if nSize > (nPotenz) then
AFormat := 'fsKilobyte';
if nSize > (nPotenz * nPotenz) then <<< funktioniert obwohl größer als 65535
AFormat := 'fsMegabyte';
if nSize > (nPotenz * nPotenz * nPotenz) then <<< funktioniert obwohl größer als 65535
AFormat := 'fsGigabyte';
if nSize > (nPotenz * nPotenz * nPotenz * nPotenz) then <<< hier knallt es wieder weil, > 32Bit
AFormat := 'fsTerabyte';
if nSize > (nPotenz * nPotenz * nPotenz * nPotenz * nPotenz) then
AFormat := 'fsPetabyte';
Der Delphi Compiler verwendet also anscheinend für Multiplikationen (intern !!!) einen Integer als Speicheradresse. Liegt warscheinlich daran, dass das aktuelle
RAD 2007 noch kein 64Bit Compiler ist.