eventuell ist es heute zu warm, denn ich habe grade einen "Merkwürdige Erscheinung":

Ich arbeitet nur mit Bytes und provoziere "bewust" einen 8-Bit Überlauf bzw. Unterlauf.
55-254 ist normalerweise -199
Also Hexadezimale Schreibweise mit 16 Bit wäre das Ergebnis 0xFF39 und als Byte eben nur die 0x39 was wiederum der Zahl in Dezimal 57 entspricht.
Dann tätige ich einen Vergleich ob das Ergebnis größer 5 ist und hier habe ich je nach Codierung 2 unterschiedliche Ergebnisse.
In "C" hätte ich gesagt, das liegt an der "Integer Promotion" , aber in Pascal werden doch meines Wissens nach keine automatischen Umwandlungen getätigt.
Vielleicht hab ich aber wirklich grad einen Gedankenfehler. Könnt Ihr mich bitte aufklären.
Code: Alles auswählen
procedure TForm1.FormCreate(Sender: TObject);
var Timer,old,count,diff:Byte;
begin
Timer := 55;
Old := 254;
count := 5;
diff := Timer-old;
if (Timer-old) > count then caption:='JA' else Caption:='NEIN'; // hier kommt NEIN raus
// if (diff) > count then caption:='JA' else Caption:='NEIN'; // hier kommt JA raus
end;
wenn ich das Caste :
Code: Alles auswählen
if Byte(Timer-old) > count then caption:='JA' else Caption:='NEIN';
Siro
sorrry vergessen:
Windows 10, 64 Bit
Lazarus V2.0.0
FPC 3.0.4