Re: Timerüberlauf Kategorie: Programmierung (von nitram - 30.06.2009 8:30) | ||
Als Antwort auf Re: Timerüberlauf von Detlef - 30.06.2009 8:12 | ||
| ||
> Hallo NitraM, > > ganz verstanden habe ich das noch nicht. > Gesetzt den Fall, timer erhält bei der Zuweisung den Wert 2147483647. > 600 ms später komme ich wieder zu der if Anweisung. system.timer() hätte wegen Umlaufs > den Wert -2147483048? Die Rechenoperation -2147483048 -2147483647 mü�te -4294966695 ergeben, > übersteigt damit den Wertebereich des Typs long um das Doppelte, aber wieso sollte das Ergebnis > trotzdem 600 werden? > > Detlef Nicht nur der Timer läuft über, sondern jede Variable. somit wird aus 2147483647+1 immer -2147483648 , egal, ob timer oder normale Long-Variable. Timervergleiche werden in der Programmierung eigentlich schon immer auf diese Weise gemacht, da diese immer funzen. Vieleicht lässt sich das am einfachsten mit der Hex-Schreibweise verdeiutlichen: 0x00000000 bis 0x7FFFFFFF sind die Werte von 0 bis 2147483647 0x80000000 bis 0xFFFFFFFF sind die Werte von -2147483648 bis -1 Addierst Du nun bei 0x7FFFFFFF eins dazu, erhäst Du 0x80000000, also -2147483648. Addierst Du bei 0xFFFFFFFF (=-1) ein dazu erhälst Du 0. Der eigentliche �berlauf findet also von -1 zu 0 statt. Bei der Subtraktion verhält sich das ganze genauso. Wenn Du jetzt system.timer()-timer rechnest, und timer den Wert 2147483000 hat und der System-timer bei -214748250 steht, wird also -2147482500 - 2147483000 gerechnet. Hier kommt es bei der Berechnung zu einem "�berlauf": 0x8000047C - 0x7FFFFD78 Wie Du siehst aber nicht wirklich. :-) Das Ergebis wäre hier 1796 (0x704). Ineressant wäre eher der Timerbereich von z.B. -100 zu +50. system.timer() - timer: 0x00000032 - 0xFFFFFF9C Hier findet ein echter �berlauf bei der Berechnung statt. Das Ergebis ist aber dennoch +150 | ||
Antwort schreiben Antworten: Re: Timerüberlauf (von reneforster - 30.06.2009 15:01) Re: Timerüberlauf (von nitram - 30.06.2009 21:16) Re: Timerüberlauf (von Detlef - 30.06.2009 9:21) Re: Timerüberlauf (von Detlef - 30.06.2009 8:45) |