kleines c++ programm um ieee floats als bits darzustellen
Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.
ieee testprogramm
laesst sich leicht erweitern.
achtung: die bits werden in umgekehrter reihenfolge getestet und der string quasi von hinten aufgebaut.
musste nen kleinen hack einbauen (void* pointer reinterpret_cast ging irgendwie nicht)
sollte sicher sein, benutzung aber auf eigene gefahr!
#include <iostream>
#include <string>
using namespace std;
void print32bits(void* p, bool showparts);
int main(int argc, char* argv[])
{
cout<<sizeof(unsigned int)<<" "<<sizeof(float)<<"\n";
float f=3.1415926f;
unsigned int ui=255;
signed int si=-255;
cout<< f << "\n";
print32bits((void*)&f, true);
cout<< ui << "\n";
print32bits((void*)&ui, false);
cout<< si << "\n";
print32bits((void*)&si,false);
int choice=1;
while(choice!=0 && cin.good())
{
cout<<"\n-----------------------------\nfloat(1), int(2), unsigned int(3) oder ende(0)?";
cin>>choice;
cout<<"\nZahl eingeben:";
switch (choice)
{
case 1:
cin>>f;
cout<<f<<":\n";
print32bits((void*)&f,true);
break;
case 2:
cin>>si;
cout<<si<<":\n";
print32bits((void*)&si,false);
break;
case 3:
cin>>ui;
cout<<ui<<":\n";
print32bits((void*)&ui,false);
break;
}
}
return 0;
}
void print32bits(void* p, bool showparts)
{
unsigned int q=*(unsigned int*)p;
std::string res;
for(int x=0;x<32;x++)
{
if(q&1)res="1"+res;
else res="0"+res;
if(showparts&&(x==30||x==31-9))res=" "+res;
q=q>>1;
}
cout<<res<<"\n";
}