Циклический сдвиг битового представления или самого числа? Если второе, то банально делением / умножением. А если первое, то да, можно через union. Если у вас на машине double и long long одинакового размера, то такой код будет работать:
#include <stdio.h>
union double_long_long
{
double dbl;
unsigned long long ull;
};
int main(void) {
printf("%d %d\n", sizeof(double), sizeof (unsigned long long));
union double_long_long u;
u.dbl = -12344235235325235.3252352352938598325982359935289;
u.ull = u.ull >> 1;
printf("%lf\n", u.dbl);
return 0;
}