#include <cstdio>
using namespace std;
int main( void )
{
double * d = new double ;
* d = 15.25 ;
printf ( "float: %f\n " , * d) ;
//forced hex output of double
printf ( "forced bitwise of double: " ) ;
unsigned char * c = ( unsigned char * ) d;
int i;
for ( i = sizeof ( double ) - 1 ; i >= 0 ; i-- ) {
printf ( "%02X " , c[ i] ) ;
}
printf ( "\n " ) ;
//cast to long long-pointer, so that bitops become possible
long long * l = ( long long * ) d;
//now the bitops:
printf ( "IntHex: %016X, float: %f\n " , * l, * ( double * ) l) ; //this output is wrong!
* l = * l | 0x07 ;
printf ( "last 3 bits set to 1: %016llX, float: %.30f\n " , * l, * d) ; //this output is wrong!
* l = * l | 0x18 ;
printf ( "2 bits more set to 1: %016llX, float: %.30f\n " , * l, * d) ; //this output is wrong!
* l = * l | 0x10000000000ll;
printf ( "float4: %f\n " , * d) ;
}
I2luY2x1ZGUgPGNzdGRpbz4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBtYWluKHZvaWQpCnsKCWRvdWJsZSAqZCA9IG5ldyBkb3VibGU7IAoJKmQgPSAxNS4yNTsgCglwcmludGYoImZsb2F0OiAlZlxuIiwgKmQpOwoKCS8vZm9yY2VkIGhleCBvdXRwdXQgb2YgZG91YmxlCglwcmludGYoImZvcmNlZCBiaXR3aXNlIG9mIGRvdWJsZTogIik7Cgl1bnNpZ25lZCBjaGFyICogYyA9ICh1bnNpZ25lZCBjaGFyICopIGQ7CglpbnQgaTsKCWZvciAoaSA9IHNpemVvZiAoZG91YmxlKS0xOyBpID49MCA7IGktLSkgewoJICAgICBwcmludGYgKCIlMDJYICIsIGNbaV0pOwoJfQoJcHJpbnRmICgiXG4iKTsKCgkvL2Nhc3QgdG8gbG9uZyBsb25nLXBvaW50ZXIsIHNvIHRoYXQgYml0b3BzIGJlY29tZSBwb3NzaWJsZQoJbG9uZyBsb25nICogbCA9IChsb25nIGxvbmcqKWQ7CgkvL25vdyB0aGUgYml0b3BzOiAKCXByaW50ZigiSW50SGV4OiAlMDE2WCwgZmxvYXQ6ICVmXG4iLCAqbCwgKihkb3VibGUqKWwpOyAvL3RoaXMgb3V0cHV0IGlzIHdyb25nIQoJKmwgPSAqbCB8IDB4MDc7IAoJcHJpbnRmKCJsYXN0IDMgYml0cyBzZXQgdG8gMTogJTAxNmxsWCwgZmxvYXQ6ICUuMzBmXG4iLCAqbCwgKmQpOy8vdGhpcyBvdXRwdXQgaXMgd3JvbmchCgkqbCA9ICpsIHwgMHgxODsgCglwcmludGYoIjIgYml0cyBtb3JlIHNldCB0byAxOiAlMDE2bGxYLCBmbG9hdDogJS4zMGZcbiIsICpsLCAqZCk7Ly90aGlzIG91dHB1dCBpcyB3cm9uZyEKCgkqbCA9ICpsIHwgMHgxMDAwMDAwMDAwMGxsOwoJcHJpbnRmKCJmbG9hdDQ6ICVmXG4iLCAqZCk7Cn0K