#include <iostream>
using namespace std;

union Float{
// public:
	double m_Val;
	unsigned long long m_Hex;
	struct{
		unsigned long long mantissa:52;
		unsigned long long exponment:11;
		unsigned long long sign: 1;
	};
// public:
	Float(double val=0.0) : m_Val(val){}
	void SetMantissa(unsigned long long m)	{
		mantissa = m;
	}
	void SetExponment(unsigned long long e){
		exponment = e;
	}
	void SetSign(unsigned long long s){
		sign = s;
	}

	double GetVal(){return m_Val;}
	unsigned long long GetHex(){return m_Hex;}
};

int main()
{
	Float f;
	f.SetExponment(0x400ULL);
	f.SetMantissa(0x8000000000000ULL);
	f.SetSign(0ULL);
	
	cout << f.GetVal() << endl;
	cout << f.GetHex() << endl << endl;

	f.m_Val = 0.5;
	cout << f.GetVal() << endl;
	cout << f.GetHex() << endl;
	cin.get();
	return 0;
}