Bonjour,
Uniquement par curiosité : je travaillais ce matin sur des int64.
--> -1073741824. Résultat faux. Nécessite un transtypage de i.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
--> 278099132416. Résultat correct.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
Par défaut, dans mon programme, i est un integer de type "32-bit"
- In OBJPAS mode and in DELPHI mode, an Integer has a size of 32 bit
- The objpas unit is meant for compatibility with Object Pascal as implemented by Delphi. The unit is loaded automatically by the Free Pascal compiler whenever the Delphi or objfpc more is entered, either through the command line switches -Sd or -Sh or with the {$MODE DELPHI} or {$MODE OBJFPC} directives.
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
Partager