Einzelnen Beitrag anzeigen

Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#9

AW: Datentyp "Int64" fehlerhaft?

  Alt 19. Jun 2017, 10:53
+9223372036854775808 überschreitet halt den Wertebereich von Int64. Deshalb ist das nicht darstellbar. Was willst Du denn am Ende erreichen?
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

Code:
int CLZ(uint64_t x) {
  printf("");
  int n;
  if (x == 0) {
    return 64;
  }
  n = 0;
  if (x <= 0x00000000FFFFFFFFL)
   {n = n + 32;
   x = x << 32;}
  if (x <= 0x0000FFFFFFFFFFFFL)
   {n = n + 16;
   x = x << 16;}
  if (x <= 0x00FFFFFFFFFFFFFFL)
   {n = n + 8;
   x = x << 8;}
  if (x <= 0x0FFFFFFFFFFFFFFFL)
   {n = n + 4;
   x = x << 4;}
  if (x <= 0x3FFFFFFFFFFFFFFFL)
   {n = n + 2;
   x = x << 2;}
  if (x <= 0x7FFFFFFFFFFFFFFFL)
   {n = n + 1;}
  return n;
}
mit 2048 aufgerufen wird. Sie entstammt diesem Projekt und wird zur Berechnung der optimalen Länge von zu verschmelzenden Teilarrays benötigt. Die wollte ich mit Delphi nachbilden. Bis 2047 ist auch in Delphi alles in Ordnung, ab 2048 aber nicht mehr, weil dieser zitierte Wert negativ wird und das Minuszeichen nicht beseitigt werden kann, und zwar auch nicht mit dem Datentyp UInt64 (in Delphi 7). Ich werde weiter forschen.

Gruß

Delphi-Laie
  Mit Zitat antworten Zitat