hi, ich hätte eine Frage. Ich benutze avr studio 7 und deklariere dort eine int32 Variable. dort speichere ich z. B. den wert 10*3600 + 50*60. also größer als ein int16. in der compiler konsole kommt die warnung, dass es ein overflow ist. und die zahl wird nicht richtig angezeigt. auch wenn ich die variable mit long signed oder uint32_t deklariere, trotzdem steht dort eine warnung wegen overflows. kennt jemand diesen fehler? ich bin da etwas ratlos. scheint so, als dass der compiler was nicht rafft.
Eugen T. schrieb: > kennt jemand diesen fehler? ich denke schon > ich bin da etwas ratlos. scheint so, als dass der compiler was nicht > rafft. nein, er hält sich nur ein den C Standard. 50*60 wird als int gerechnet, weil du keine vorgaben machst, damit wird es abgeschnitten.
1 | 10ul*3600ul + 50ul*60ul |
sollte da helfen.
Eugen T. schrieb: > hi, > > ich hätte eine Frage. > > Ich benutze avr studio 7 und deklariere dort eine int32 Variable. > > dort speichere ich z. B. den wert 10*3600 + 50*60. also größer als ein > int16. > > in der compiler konsole kommt die warnung, dass es ein overflow ist. > > und die zahl wird nicht richtig angezeigt. > > auch wenn ich die variable mit long signed oder uint32_t deklariere, > trotzdem steht dort eine warnung wegen overflows. > > kennt jemand diesen fehler? > > ich bin da etwas ratlos. scheint so, als dass der compiler was nicht > rafft. Ich hab da eine andere Vermutung wer hier was nicht rafft. Natürlich geht (u)int32_t. Poste mal deinen Code und die Fehlermeldung dazu.
:
Bearbeitet durch User
Das übliche Missverständnis. In var = expr; hat der deklarierte Typ von "var" keinerlei Einfluss auf die Art, wie in "expr" gerechnet wird. In c = a * b; erfolgt also die Multiplikation in einer Weise, die nur von den Typen von a und b abhängt, nicht aber von c.
:
Bearbeitet durch User
jojo peter 2, vielen großen dank, muss ul dahinter klatschen, sonst klappt es nicht richtig. vielen, vielen dank, mit dem fehler hab ich mich nen ganzen tag beschäftigt. für eine zeitrechnung, wo die sekunden zu stunden und min gerechnet werden.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.