Überlauf erkennen
-
Hallo,
mein erster Tag hier und schon meine zweite Frage
Sind numersiche Überlauf in C oder C++ definiert? Oder sind diese Compiler-Spezifisch?
Mich intressiert ein unsigned int Überlauf. Wie kann ich diesen erkennen und entsprechende Maßnahmen einleiten?
Mein Ansatz ist
unsigned int a(0x7FFFFFFF); unsigned int b(0x9FFFFFFF); unsigned int c; unsigned long d; c = a + b; // Überlauf // Ist das korrekt? if((b - 0xFFFFFFFF) > a) d = a + b; else c = a + b;
Wie siehts bei * und - aus? Gibt es hierzu vordef. Makros?
-
c=a+b;
if(c<a) überlaufif(c<b) geht genausogut
-
ThomasEnzinger schrieb:
Wie siehts bei * und - aus?
bei 'minus' analog zu dem was volkard geschrieben hat, nur auf 'grösser als vorher' prüfen.
bei multiplikationen wüsste ich jetzt keinen tollen trick, ausser dass du einen grösseren datentyp verwendest und schaust, ob der wertebereich des original-datentyps nicht überschritten wurde. beispiel:unsigned int result = a * b; // das ergebnis soll in 'unsigend char' 0...255 passen if (result > 255) { // ueberlauf }
-