Wir ihr ja wisst, bin ich dabei Image-Formate zu portieren.
Dabei bin ich (nach längerem verzweifeltem Suchen) auf ein unerwartetes Phänomen gestossen.
Auf's Minimum reduziert sieht's so aus:
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
var a,b:Byte;
begin
{.$Q+}
a:=91;
b:=84;
Edit1.text:=(intToStr(a + b - 256)); // Delphi gibt -81, FPC gibt 4294967215
end;
Delphi/Kylix gibt immer -81 zurück, was man auch erwarten würde.
FPC gibt 4294967215 resp. mit {$Q+} einen EIntOverflow.
(FPC 2.0.4 [2006/08/20] for i386)
Ist das ein Bug oder hat das seine Berechtigung?
Wenn letzteres, wie kann ich das "richtige" Resultat bekommen, ohne die Datentypen ändern zu müssen?
Vielen Dank!
P.S. hab's soeben rausgefunden:
Edit1.text:=(intToStr(integer(a + b - 256)));
Aber ich lasse den Beitrag trotzdem stehen, als Warnung.
Man muss schon ziemlich aufpassen...
------------------
P.S.2 @monta
Mir ist schon oft aufgefallen, dass nach zweimaligem editieren die Sourcecodes "gescrambled" werden.
Ich setzte die dann jeweils wieder neu ein.
Sieht so aus
procedure TForm1.Button1Click%u28Sender%u3a TObject%u29;
var a,b%u3aByte;
begin
%u7b.$Q+%u7d
a%u3a=91;
b%u3a=84;
Edit1.text%u3a=%u28intToStr%u28a + b - 256%u29%u29; // Delphi gibt -81, FPC gibt 4294967215
end;