Forum: Object-Pascal / Delphi-Language
Delphi
by Delphi-Laie,
19. Jun 2017
Sehr viel, denn sie ist die Lösung meines Problemes. Ich hatte die Hoffnung schon aufgegeben. Ich hatte einfach 1:1 von der Vorlage übernommen und die Bedingungen so formuliert:
if x<=$FFFFFFFF then
usw. Dabei stieß ich dann bei Eingabewerten ab 2048 an die 64-Bit-Grenze, die schier unüberwindlich schien.
Jedenfalls sortiert das erste Timsort in diesem Projekt nun auch bei...
Forum: Object-Pascal / Delphi-Language
Delphi
by Delphi-Laie,
19. Jun 2017
Das ist mir auch gerade klargeworden. Ist 2^63, int64 geht aber nur bis 2^63-1.
Dieser Wert entsteht - und zwar im Visual Studio ohne Vorzeichen - wen die C(++?)-Funktion
int CLZ(uint64_t x) {
printf("");
int n;
if (x == 0) {
return 64;
}
Forum: Object-Pascal / Delphi-Language
Delphi
by Delphi-Laie,
19. Jun 2017
Erstmal danke für die rege Beteiligung!
Yo, ab Delphi 7.
Damit habe ich das Projekt ersatzweise auch ausprobiert. Der Wert rutscht aber auch in's negative. Habe es soeben mit Delphi 3 und Cardinal ausprobiert. Auch Cardinal rutscht in's Negative, beim nächsten shl dann unweigerlich auf 0. Und sogar dann, wenn man statt shl y" ein * 2^y verwendet. Daß so etwas mit vorzeichenlosen Typen...
Forum: Object-Pascal / Delphi-Language
Delphi
by Delphi-Laie,
18. Jun 2017
Hallo Delphifreunde!
Im Anhang befindet sich ein mit Delphi 4 erstelltes Kleinprojekt, das ein merkwürdiges Verhalten mit dem Datentyp Int64, auf das ich stieß, demonstrieren soll.
Los geht es mit dem Wert 2048.
Die damit gefüllte Int64-Variable wird zunächst mit 32, dann mit 16 linksverschoben. Bis dahin ist noch alles in Ordnung.
Beim nächsten shl (um 4) wird der Wert erstmalig...