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.


Anmelden zum Antworten