Problem mit unsigned long?

Gast #222834
Lesenswert?

Hallo,
ich programmiere den 68HC12 in C und habe folgendes Problem:
wenn ich alles in einer Zeile rechne, ist das resultat komplet falsch:

t_m = (DELTA_P_ER*REAL_LOOP/DELTA_L2_L1); // ergibt 0xfffffffd

wenn ich es aufteile, ergibt es das richtige resultat:
t_m = DELTA_P_ER;
t_m = t_m *REAL_LOOP;
t_m = t_m / DELTA_L2_L1; // ergibt 184

Definitionen:
unsigned long t_m;
#define DELTA_P_ER      0x3EF8
#define DELTA_L2_L1     0x2219
#define REAL_LOOP       100

Kann mir jemand sagen, wo hier das Problem liegt? Ist es nicht möglich,
das ganze in einer Zeile zu rechnen?
Besten Dank für eure Hilfe!
Gast #222835
Lesenswert?

Hi,

interessant. beim GCC funktioniert der Codeausschnitt so wie Du ihn
gepostet hast, und es kommt 184 raus.
Ich vermute mal, dass Dein Compiler/Preprozessor für die Konstanten als
Datentyp unsigned short (16 bit) annimmt und damit rechnet. Bei der
Multiplikation gibt es dann einen Überlauf und der Wert stimmt nicht
mehr. Meine Theorie.
Versuch doch mal ein L hinter die Werte zu packen, also z.B.

#define DELTA_P_ER   0x3EF8L

Edd

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren