Datentyp vor Überlauf schützen. Geht das?
-
Hallo,
habe hier eine variable vom Typ
unsigned short int number;
(also zumindest auf meinem PC wären das 16bit)
wenn ich nun schreibe:number = 65536+1;
dann ist der Wert von number = 1
Kann ich diese Variable davor schützen das sie so überläuft?Kann leider keinen 32bit Datentyp nehmen.
-
pauschal - gar nicht. Du könntest den short-Wert höchstens in einer eigenen Klasse kapseln und alle mathematischen Operatoren überladen, um auf Bereichsüberschreitungen zu prüfen:
class checked_value { unsigned short val; public: checked_value(unsigned short v) : val(v) {} checked_value& operator+=(checked_value v2) { ASSERT(USHORT_MAX-v2.val>=val); val+=v2.val; return *this; } ... };
-
Du könntest den short-Wert höchstens in einer eigenen Klasse kapseln und alle mathematischen Operatoren überladen, um auf Bereichsüberschreitungen zu prüfen
...wenn wir denn hier im C++-Forum wären
Grüße
Martin
-
CStoll schrieb:
pauschal - gar nicht. Du könntest den short-Wert höchstens in einer eigenen Klasse kapseln und alle mathematischen Operatoren überladen, um auf Bereichsüberschreitungen zu prüfen
dass diese c++ fans immer so übertreiben müssen...
if (a+b < a) { // ueberlauf } else { // kein ueberlauf }
-
Aber nur wenn b positiv ist!
P.S. @JDHawk: Auch die Zahl 65536 ist schon keine gültiger Wert mehr für ein 16-Bit unsigned short, denn es entspricht der 0 - und daher kommt bei Addition von 1 eben 1 heraus.