Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: Timerüberlauf Kategorie: Programmierung (von Detlef - 30.06.2009 9:21)
Als Antwort auf Re: Timerüberlauf von nitram - 30.06.2009 8:30
Ich nutze:
C-Control II Station, OSOPT V3.0
> > 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


Das bedeutet dann ja aber, das bei einem logischen Vergleich zweier Zahlen, immer die
Negative die "gröÃ?ere" Zahl ist, also          -1 > 1 --> true!


    Antwort schreiben


Antworten: