Как описано в моем комментарии к связанному вопросу о 32-битном варианте:
... в основном вы можете использовать int32 со знаком и инвертировать младшие 31 бит, если бит знака набор. Аналогичный подход работает, если вы хотите беззнаковый, но вы должны добавить смещение 0x80000000.
Как код, адаптированный к 64-битному:
int64_t order_preserving_repr(double x)
{
int64_t k;
memcpy(&k, &x, sizeof k);
if (k<0) k ^= INT64_MAX;
return k;
}