bitshiften



  • hallo alle zusammen,

    #include<iostream.h>

    void main()

    {
    short a(16673),b(10);
    int c=((int)(a)<<16|(int)(b));
    float fc=(float)(&c);

    cout<<fc<<endl;
    }
    von diesem programm bekomme ich den wert 10.0625=fc gelifert!!
    wie komme ich von 10.0625=fc auf meine ursprünglichen werte
    a(16673),b(10); ????

    h = (int (n)<<16 | (int)(c));

    so bin ich wieder auf b=h gekommen.
    aber für a habe ich keine lösung
    thanx for help



  • Man kann generell nicht sagen, dass durch zurückschieben, auch der alte Inhalt wieder hergestellt wird. Wenn du eins rausschiebst und schiebst zurück kommt ja ne 0 wieder rein, somit hat sich der Wert geändert



  • Pellaeon schrieb:

    Man kann generell nicht sagen, dass durch zurückschieben, auch der alte Inhalt wieder hergestellt wird.

    Nö, es geht ja hier nicht darum, verworfene Daten wiederherzustellen.

    fubu16 schrieb:

    wie komme ich von 10.0625=fc auf meine ursprünglichen werte

    Indem du deinen Algorithmus umkehrst. Was du momentan machst ist << und |. Eine Umkehrung wäre demzufolge & und >>.

    short a(16673),b(10);
    int c=((int)(a)<<16|(int)(b));
    float fc=*(float*)(&c);
    //
    int d = *reinterpret_cast<int*>(&fc);
    short b2 = static_cast<short>(d); // & 0xffff brauchen wir nicht, da dies durch den Cast schon gemacht wird
    short a2 = static_cast<short>(d >> 16);
    

    noch einige Ergänzungen:
    - C++ legt Typgrössen nicht konkret fest, was du machst, muss also nicht überall funktionieren
    - shiften von negativen Werten ist implementationsspezifisch
    - VERWENDE BITTE AKTUELLES C++!


Anmelden zum Antworten