https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78804
--- Comment #19 from Ian Lance Taylor <ian at airs dot com> --- OK, following Joseph's suggestion, what does this print when compiled with -m64bit-doubles? #include <stdio.h> struct bits { unsigned long long fraction:52 __attribute__ ((packed)); unsigned int exp:11 __attribute__ ((packed)); unsigned int sign:1 __attribute__ ((packed)); } __attribute__ ((packed)); double d = 1.0; int main () { struct bits *p; unsigned long long *pll; printf ("%zu\n", sizeof (struct bits)); p = (struct bits *)&d; printf ("%llx %x %x\n", (unsigned long long) p->fraction, p->exp, p->sign); pll = (unsigned long long*)&d; printf ("%llx\n", *pll); return 0; }