überlauf von integervariablen in c++



  • wie überprüft man am besten einen überlauf einer variable? wenn man einen rechenausdruck hat in der form

    length=((length+count)*2)+delta;
    

    dann kann es ja bei zu großen werten zu einem überlauf kommen und der ausdruck wird nicht richtig berechnet (anstatt MAX kommt ann z.b. wieder 4 oder so raus). wenn man nun möchte, dass der ausruck bei dem maximum der variable einfach stehen belibt (also z.b. 0xffffffff), wie macht man das am besten? sollte man sich dafür funktionen oder besser makros schreiben (falls das überhaupt geht)?



  • Ne Möglichkeit in deinem Fall wäre, zu prüfen ob das Ergebnis negativ geworden ist und es dann auf MAX zu setzen.



  • ist zwar net so toller code, kannst aber folgendes probieren:

    length=(((((long)length+(long)count)*2)+(long)delta)>0xffff)?0xffff:((length+count)*2)+delta;

    viel spaß beim klammern auflösen 🙂



  • ...dann teste ich lieber auf negative werte. das geht einfacher.

    danke für die schnellen antworten! 🙂


Anmelden zum Antworten