unsigned char - außerhalb des Wertebereichs



  • Wieder mal was einfaches für euch:
    Wenn ich eine Zahl die größer ist als 255 ist in unsigned char umwandle, dann ist das Ergebnis der Rest.

    Beispiel:
    unsigned char test = 400;
    cout << (int)test; // gibt 144 aus

    Ich hätte es aber gerne so, dass wenn der Wert größer ist, die Variable den größtmöglichen Wert des Wertebereiches annimmt.
    Also bei test=400 ist es dann 255.

    Lässt sich das durch den Kompiler einstellen, oder liegt es fest in der Natur von C++?
    Oder kennt jemand sonst nen Weg wie man das möglichst einfach umsetzen könnte?

    Danke im Voraus.

    EDIT:
    MIST....aus versehen in Mathematik gepostet...tut mir leid
    ...sollte eigentlich in Programmiersprachen/C++



  • vielleicht sowas?

    #define TRUNCATE_TO_255(a) ((a)>255?255:(a))
    


  • VHASE schrieb:

    Lässt sich das durch den Kompiler einstellen, oder liegt es fest in der Natur von C++?

    Das liegt in der Natur von C(++) - Ganzzahltypen rechnen mit Modulo-Arithmetik.

    Oder kennt jemand sonst nen Weg wie man das möglichst einfach umsetzen könnte?

    Du könntest das in eine Funktion auslagern:

    template<typename INT_TYPE> checked(unsigned long val)
    {
      return val>numeric_limits<INT_TYPE>::max() ? numeric_limits<INT_TYPE>::max() : val;
    }
    
    unsigned char test = checked<unsigned char>(400);
    


  • Dieser Thread wurde von Moderator/in Jester aus dem Forum Mathematik in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Log in to reply