Utilisation des entiers (longs) et int64
Bonjour,
Uniquement par curiosité : je travaillais ce matin sur des int64.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
unit Unit1;
{$mode objfpc}{$H+}
[...]
procedure TForm1.Button1Click(Sender: TObject);
var
aSize : int64;
i : integer;
begin
i := 259;
aSize := i*1024*1024*1024;
showmessage(IntToStr(aSize));
end; |
--> -1073741824. Résultat faux. Nécessite un transtypage de i.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
unit Unit1;
{$mode objfpc}{$H+}
[...]
procedure TForm1.Button2Click(Sender: TObject);
var
aSize : int64;
i : integer;
iTmp64 : int64;
begin
i := 259;
iTmp64 := i;
aSize := iTmp64*1024*1024*1024;
showmessage(IntToStr(aSize));
end; |
--> 278099132416. Résultat correct.
Par défaut, dans mon programme, i est un integer de type "32-bit"
Donc, en résumé, il y a incompatibilité entre les integer (longint) et les int64...
Le type des "1024" utilisés dans mes formules de calcul sont correctement interprétés qu'il s'agisse de calculs en 32 bits ou en 64 bits. Le type de "1024" c'est quoi ?
Cordialement. Gilles