理由が分からん('A`)
#include <stdio.h>
#include <stdlib.h>

typedef union {
double a;
unsigned char b[8];
} D8;

double swap(D8 s) {
return (double)((s.b[0] << 56) |(s.b[1] << 48) |
(s.b[2] << 40) |(s.b[3] << 32) |
(s.b[4] << 24) |(s.b[5] << 16) |
(s.b[6] << 8) |(s.b[7]));
}

int main() {
D8 a;
int i;
a.a = 0.0;
a.a = swap(a);
printf("%g\n", a.a);
}

gcc ttt.c
ttt.c: In function
[minomura@mozart07 minomura]$ ttt.c:10: warning: left shift count width of type
ttt.c:11: warning: left shift count width of type
ttt.c:12: warning: left shift count width of type
ttt.c:13: warning: left shift count width of type