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++!