Kleines Rätsel : Overflow läßt sich nicht mit <> erkennen

Gast #1138172
Lesenswert?

Hallo Zusammen,

ich hab folgenden Code (Atmega64 WinAVR) und ein mysteriöses Problem.
1
long Overflow;
2
char plus;
3
char minus;
4

5
Overflow += 3;
6
if(Overflow > 0) {
7
  plus = 1;
8
  minus = 0;
9
} else {
10
  plus = 0;
11
  minus = 1;
12
}

Nun läuft der Overflow durch und spring von ca. 32.000 auf -32.000.
Nur erkennt dies der ">" Operator nicht.
Sobald Overflow aber die 0 durchläuft (-3,0,3,6,9....) wird der
Wert als positiv oder negativ erkannt.

Wie kann das sein?
Ich seh's ist nicht... mit der Suche konnte ich leider kein
passendes Thema finden... über Hilfe würde ich mich sehr freuen.

Danke & Viele Grüße
Bernd
#1138395
Lesenswert?

Wenn ich das richtig sehe, dann willer doch nur wissen ob der Wert in 
der Variable positiv oder negativ ist (wobei die 0 eigendlich noch zum 
positiven gehört aber egal). Der Name der Variable ist wohl nur 
overflow, da er diese immer erhöt und deshalb auch immer mal wieder von 
der obersten Grenze auf die unterste umspringt. Natürlich könnte er auch 
einfach das höchste Bit abfragen, da dies ja für das (-) steht ^^

Gruß ErgoProxy
#1138426
Lesenswert?

Peter Dannegger wrote:

> Das kann er auch garnicht.

Doch, das kann er schon, wenn immer nur an dieser Stelle addiert und 
sonst nirgends subtrahiert wird. Ist zwar nicht konform zum Standard, 
weil das Verhalten beim Überlauf hier undefiniert ist, aber praktisch 
passt es.

Je nach Programm könnte allerding der Optimizer sich des Themas kreativ 
annehmen. Denn der darf u.U. davon ausgehen, dass dies nicht passiert.

Aber bei 32 Bits dauert es augehend von 0 verdammt lang bis der Fall 
eintritt. ;-)

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