ein integer in zwei short teilen



  • Ich meine eine Union wäre eine gute Lösung

    union
    {
    unsigned int alles;
    unsigned short hälfte[2];
    };
    


  • Ich meine eine Union wäre eine gute Lösung

    union
    {
    unsigned int alles;
    unsigned short hälfte[2];
    };
    


  • c++-er schrieb:

    Ich meine eine Union wäre eine gute Lösung

    Ist es aber nicht :p


  • Mod

    plongor schrieb:

    am einfachsten wäre es mit einem short pointer.

    short getUpper( long value )
    {
        short * ptr = (short*) &value;
        ++ptr;
        return *ptr;
    }
    
    short getLower( long value )
    {
        short * ptr = (short*) &value;
        return *ptr;
    }
    

    undefiniert

    c++-er schrieb:

    Ich meine eine Union wäre eine gute Lösung

    union
    {
    unsigned int alles;
    unsigned short hälfte[2];
    };
    

    ebenfalls undefiniert

    Natürlich muss die Repräsentation beider Typen entsprechend zueinander passen (also short: 16bit ohne padding, int: 32bit ohne Padding) - aber beide Verfahren (die auf das Gleiche hinauslaufen) haben dennoch aus dem gleichen Grunde (3.10/15) undefiniertes Verhalten.



  • Könnte mal jemand einen FAQ Beitrag dazu schreiben warum das undefiniert ist? Ich sehe das nämlich ziemlich oft das eine Union für sowas missbraucht wird.


Anmelden zum Antworten