Problem mit Datentyp UInt64

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Mathias
Beiträge: 7063
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Problem mit Datentyp UInt64

Beitrag von Mathias »

Viele Wege führen nach Rom.
Das alles gibt das gleiche Ergebnis, und alles ohne Warnung:

Code: Alles auswählen

const
  u1: uint64 = uint64($FFFFFFFFFFFFFFFF);
  u2: uint64 = uint64(-1);
begin
  WriteLn(u1);
  WriteLn(u2);
  WriteLn(high(QWord));
  WriteLn(high(UInt64));
end.  
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

PascalDragon
Beiträge: 993
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Problem mit Datentyp UInt64

Beitrag von PascalDragon »

Vamogu05 hat geschrieben: Mi 15. Okt 2025, 15:09 Mit einem Typecast funktioniert es:
Test: UInt64 = UInt64($FFFFFFFFFFFFFFFF);

Gut, dann werde ich alle Einträge casten. Das sollte mit suchen/ersetzen machbar sein.
Pascal Compiler arbeiten standardmäßig mit vorzeichenbehafteten Typen, das heißt auf 64-Bit finden Berechnungen mit Int64 statt, deswegen kannst du auch $FFFFFFFFFFFFFFFF nicht an einen UInt64 zuweisen, da du effektiv -1 an einen vorzeichenlosen Typen zuweist. Das heißt hier eine Typumwandlung zu verwenden ist die korrekte Lösung.
FPC Compiler Entwickler

Antworten